【发布时间】:2015-08-17 14:11:45
【问题描述】:
使用ExecuteReader 我可以返回DataReader,但out 参数返回0。
使用ExecuteNonQuery 我能够检索out 参数(具有正确的值),但ExecuteNonQuery 不返回DataReader。
这里是给出上下文的过程:
SQL 查询:
CREATE PROCEDURE [dbo].[SelectDays]
@dateStart datetime,
@dateEnd datetime,
@recordCount bigint out
AS
BEGIN
select @recordCount = count(*)
from dbo.[Days]
where [Date]>=@dateStart and [Date]<=@dateEnd;
select [ID],[Name]
from dbo.[Days]
where [Date]>=@dateStart and [Date]<=@dateEnd;
END
有什么方法可以返回 DataReader 和 out 参数,还是应该为每个参数创建两个单独的过程?
C#代码:
Int32 returnValue = 0;
Parameters parameters = new Parameters();
parameters.Add(new SqlParameter("@dateStart", dateStart != null ? (object)dateStart : DBNull.Value));
parameters.Add(new SqlParameter("@dateEnd", dateEnd != null ? (object)dateEnd : DBNull.Value));
SqlParameter out_recordCount = new SqlParameter("@recordCount", SqlDbType.BigInt);
out_recordCount.Direction = ParameterDirection.InputOutput;
out_recordCount.Value = recordCount;
parameters.Add(out_recordCount);
SqlParameter return_Value = new SqlParameter("@RETURN_VALUE", SqlDbType.Int);
return_Value.Direction = ParameterDirection.ReturnValue;
parameters.Add(return_Value);
dataReader = this.command.ExecuteReader("dbo.SelectDays", CommandType.StoredProcedure, parameters.ToArray());
if(out_recordCount.Value != DBNull.Value)
recordCount = Convert.ToInt64(out_recordCount.Value);
returnValue = Convert.ToInt32(return_Value.Value);
return returnValue;
【问题讨论】:
-
你能展示你的C#代码吗?您是否将
CommandType设置为CommandType.StoredProcedure?您如何将参数传递给命令? -
也许this 会有所帮助。
-
command到底是什么?我不熟悉采用命令文本、类型和参数的SqlCommand.ExecuteReader的重载。
标签: c# sql-server