当前位置: 代码迷 >> ASP.NET >> 输出存储过程有关问题
  详细解决方案

输出存储过程有关问题

热度:7054   发布时间:2013-02-25 00:00:00.0
输出存储过程问题
存储过程
SQL code
USE [OperationData]GO/****** Object:  StoredProcedure [dbo].[Pro_UserMax]    Script Date: 09/28/2012 09:23:04 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER procedure [dbo].[Pro_UserMax]@maxNum int outputAS  begin  select @maxNum=MAX(Convert(int,PerNum)) from Sys_user  end

在sql里边 exec ...执行得到的结果没错 是1004 也就是这个值应该是1004

但是在C#中 我取到的值 是2 这肯定不对

C#代码如下
C# code
try{       SqlParameter[] parm = new SqlParameter[] { new SqlParameter("@maxNum",ParameterDirection.Output) };       Convert.ToInt32(SQLHelper.ExecuteNonQuery(SQLHelper.sqlConnectionString, CommandType.StoredProcedure, "Pro_UserMax", parm));    int Maxid = Convert.ToInt32(parm[0].Value);//现在maxid的值老是2    return Maxid;}catch(Exception ex){     throw ex;}//这是sqlhelp中的方法public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)        {            SqlCommand cmd = new SqlCommand();            using (SqlConnection conn = new SqlConnection(connectionString))            {                PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);                int val = cmd.ExecuteNonQuery();                cmd.Parameters.Clear();                return val;            }        }private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)        {            if (conn.State != ConnectionState.Open)                conn.Open();            cmd.Connection = conn;            cmd.CommandText = cmdText;            if (trans != null)                cmd.Transaction = trans;            cmd.CommandType = cmdType;            if (cmdParms != null)            {                foreach (SqlParameter parm in cmdParms)                    cmd.Parameters.Add(parm);            }        }


大家帮忙看下有什么错误...

------解决方案--------------------------------------------------------
访问的是同一个数据库么。。。
------解决方案--------------------------------------------------------
你跟踪下 执行存储过程的语句 得到那个 在SQL里面执行下 看得到的数值是多少?
貌似没看出错在哪里。。。
------解决方案--------------------------------------------------------
探讨
引用:

你跟踪下 执行存储过程的语句 得到那个 在SQL里面执行下 看得到的数值是多少?
貌似没看出错在哪里。。。


int val = cmd.ExecuteNonQuery();
到这里就是2 了

不知道怎么回事 在sql中 执行这个存储过程却是1004

------解决方案--------------------------------------------------------
new SqlParameter("@maxNum",ParameterDirection.Output)
这里 指定下数据类型 试试 
同时在看看连接字符串是不是指到你所要指的数据库。
------解决方案--------------------------------------------------------

SQLHelper.ExecuteNonQuery()的有些重载是可以得到存储过程返回值的。 
C# code
SqlParameter[] parm = new SqlParameter[] { new SqlParameter("@maxNum",ParameterDirection.Output) };//这里再指定下数据类型SQLHelper.ExecuteNonQuery(SQLHelper.sqlConnectionString, CommandType.StoredProcedure, "Pro_UserMax", parm);int Maxid = Convert.ToInt32(parm[0].Value);return Maxid;
------解决方案--------------------------------------------------------
在存储过程中加
return @maxNum
然后调用方法中加
"return",ParameterDirection.ReturnValue
把int Maxid = Convert.ToInt32(parm[0].Value改成
cmd.Parameters["return"].Value;
  相关解决方案