如何单次调用SQL Server存储过程同时获取结果集与返回值?
一次调用SQL Server存储过程同时获取数据集和返回值
完全可以实现,按以下步骤操作即可:
- 保留你原有的连接与命令参数配置,使用
ExecuteReader()执行命令并读取结果集 - 读取完结果集后,必须关闭DataReader(推荐用
using语句自动释放资源),之后就能正常获取返回值参数的值
完整代码示例
SqlConnection conn = new SqlConnection(ConnectionString); SqlCommand cmd = new SqlCommand("CustomersList02", conn); cmd.CommandType = CommandType.StoredProcedure; // 设置输入参数和返回值参数 cmd.Parameters.Add(new SqlParameter("@Email", email)); var returnParam = cmd.Parameters.Add(new SqlParameter("@ReturnVal", SqlDbType.Int)); returnParam.Direction = ParameterDirection.ReturnValue; conn.Open(); var dt = new DataTable(); // 读取结果集,using语句会自动关闭DataReader using(var reader = cmd.ExecuteReader()) { dt.Load(reader); } // 此时可获取返回值 int returnValue = (int)returnParam.Value;
关键原理
存储过程的返回值会在所有结果集被读取完毕、DataReader关闭后,才会被填充到对应的参数中。如果直接用ExecuteNonQuery(),只会执行命令但不处理结果集,因此拿不到数据集;而用ExecuteReader()时,必须先处理完所有结果集并关闭阅读器,才能正确读取返回值。
内容的提问来源于stack exchange,提问作者MarcosGalvani
相关产品推荐
相关产品推荐

