public SqlDataReader ExecuteDataReaderByPage(string connect, string procName,ref int records,ref int pages, params object[] parameterValues)
{
SqlParameter[] commandParameters = GetParameters(connect, procName, parameterValues);
SqlCommand cmd = PrepareCommand(connect, CommandType.StoredProcedure, procName, commandParameters);
try
{
SqlDataReader dr = cmd.ExecuteReader();
records = Int32.Parse(cmd.Parameters[2].Value.ToString());
pages = Int32.Parse (cmd.Parameters[3].Value.ToString ());
cmd.Parameters.Clear();
cmd.Dispose();
return dr;
}
catch (Exception e)
{
//异常 写入日志
EventLog.WriteEntry("ExecuteNoQueryError", e.Message, EventLogEntryType.Error);
}
return null;
}这个方法执行时 数据是对的
但是2个返回值没取到值 我在数据库中用同样的参数 可以得到返回值
pages = Int32.Parse (cmd.Parameters[3].Value.ToString ());这里得不到值 是怎么回事 ???
{
SqlParameter[] commandParameters = GetParameters(connect, procName, parameterValues);
SqlCommand cmd = PrepareCommand(connect, CommandType.StoredProcedure, procName, commandParameters);
try
{
SqlDataReader dr = cmd.ExecuteReader();
records = Int32.Parse(cmd.Parameters[2].Value.ToString());
pages = Int32.Parse (cmd.Parameters[3].Value.ToString ());
cmd.Parameters.Clear();
cmd.Dispose();
return dr;
}
catch (Exception e)
{
//异常 写入日志
EventLog.WriteEntry("ExecuteNoQueryError", e.Message, EventLogEntryType.Error);
}
return null;
}这个方法执行时 数据是对的
但是2个返回值没取到值 我在数据库中用同样的参数 可以得到返回值
pages = Int32.Parse (cmd.Parameters[3].Value.ToString ());这里得不到值 是怎么回事 ???
测试过 SqlParameter[] commandParameters = GetParameters(connect, procName, parameterValues);
查找存储过程参数 并赋值
SqlCommand cmd = PrepareCommand(connect, CommandType.StoredProcedure, procName, commandParameters);
装配命令
我以前做的可以取到啊
跟datareader对象有关系没啊
2,有可能参数类型和长度,与数据库里不同!!
没有设置成为返回类型的参数吧.
@pageI int ,--第几页 从0开始
@pageS int ,---每页记录数
@records int out ,--记录数
@rows int out ,
@uId INT
as
这样子啊 我在数据库中用同样的参数可以得到结果
params object[] parameterValues 这个是查找存储过程的参数然后赋值的
cmd的参数类型都对啊 是inputout 就是值没变
System.Data.SqlClient.SqlCommand scom = new System.Data.SqlClient.SqlCommand("",scon);scon.Open();
scom.CommandText="p_CorpClassAdd";
scom.CommandType = System.Data.CommandType.StoredProcedure;
scom.Parameters.Add(
new SqlParameter("ReturnValue", SqlDbType.Int, 4,
ParameterDirection.ReturnValue, false, 0, 0,
string.Empty, DataRowVersion.Default, null)) //增加存储过程的返回值参数 scom.ExecuteNonQuery();
Response.Write(scom.Parameters["ReturnValue"].Value.ToString()); //输出存储过程的返回值
这个你对照看一下,就知道了.
2 /// 校验用户
3 /// </summary>
4 /// <param name="user">用户信息</param>
5 /// <returns></returns>
6 public static int VerifyUser(clsUser user)
7 {
8 int iRet;
9 string sql = String.Format("EXECUTE VerifyUser @myVerifyReader OUTPUT,'{0}','{1}'",user.username,user.password); //执行的T-SQL串
10 SqlCommand scmd = new SqlCommand(sql, conn);
11 scmd.Parameters.Add(new SqlParameter("@myVerifyReader",SqlDbType.Int));
12 scmd.Parameters["@myVerifyReader"].Direction = ParameterDirection.Output;
13 //
14
15 DBOpen(conn);
16 //在返回值上有问题
17 scmd.ExecuteNonQuery();
18 iRet = (int)scmd.Parameters["@myVerifyReader"].Value;
19 DBClose(conn);
20 return iRet;
21 }
SqlCommand cmd = PrepareCommand(connect, CommandType.StoredProcedure, procName, commandParameters);
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(cmd);
try
{ da.Fill(ds);
records = Int32.Parse(cmd.Parameters[2].Value.ToString());
pages = Int32.Parse (cmd.Parameters[3].Value.ToString ());
cmd.Parameters.Clear();
cmd.Dispose();
}
catch (Exception e)
{
//异常 写入日志
EventLog.WriteEntry("ExecuteDataReaderByPageError", e.Message, EventLogEntryType.Error);
}
return ds ;我该成返回 dataset 就可以了
这是怎么回事
还是cmd 的执行方式不同的原因