存储过程:
CREATE PROCEDURE test
(
@Total int output
)
AS /* Statement1 */
SELECT @Total = COUNT(*) FROM t /* Statement2 */
SELECT * FROM table RETURN在vs.net里调试存储过程时,output窗口显示@Total有值,也返回了t表里面的所有记录。
但在程序里,执行完ExcuteReader()后,para["@Total"].Value始终没有值,而把Statement1去掉的话就得到正确值了。请问各位大哥这是什么问题啊?怎么解决呢?
Thx a lot!
CREATE PROCEDURE test
(
@Total int output
)
AS /* Statement1 */
SELECT @Total = COUNT(*) FROM t /* Statement2 */
SELECT * FROM table RETURN在vs.net里调试存储过程时,output窗口显示@Total有值,也返回了t表里面的所有记录。
但在程序里,执行完ExcuteReader()后,para["@Total"].Value始终没有值,而把Statement1去掉的话就得到正确值了。请问各位大哥这是什么问题啊?怎么解决呢?
Thx a lot!
要改名。
还顶一下!
SqlConnection myConnection = new SqlConnection(con);
SqlCommand myCommand = new SqlCommand ( "test", myConnection );
myCommand.Parameters.Add ( new SqlParameter ("@Total ",
SqlDbType.Int ) ).Direction = ParameterDirection.Output;
myConnection.Open();
DataGrid1.DataSource = myCommand.ExecuteReader();
DataGrid1.DataBind();
myConnection.Clost();
这样DataGrid就绑定了,
然后得到output值
int totalRecords = (Int) myCommand.Parameters["@Total"].Value;
这样可以即绑定DataGrid又得到output值了
不过要想像楼主那样不改变顺序,用我上面的方法就可以了!
原来问题就在于取这个output参数时,应该是在DataReader被绑定后取,而不能在ExcuteReader()执行后立即取。结贴前问多两个问题:1. 为什么两个statement要互换位置?我换不换也可以取到output值,是不是要在特定情况下才这样做?2. 问什么不能在ExcuteReader()执行后立即取output参数值?Many thx !
select @Total来代替output SqlDataReader dr = xxxx; while (dr.Read())
tvSet.TVs.Add( PopulateTVFromIDataReader(dr) ); if (returnRecordCount)
{
dr.NextResult(); dr.Read();
tvSet.TotalRecords = (int) dr[0];
} dr.Close();