存储过程
- 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里面执行下 看得到的数值是多少?
貌似没看出错在哪里。。。
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------
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;