输出参数总是返回0
问题描述:
任何人都可以请看看,看看他们是否能找出为什么我的输出参数总是返回0。输出参数总是返回0
其proberbly简单的东西,我只是无法看到它。
----------------------- SP ---------------------- ------
ALTER PROCEDURE [dbo].[test]
-- Add the parameters for the stored procedure here
@SearchPhrase VarChar(100),
@RecordsFound INT OUTPUT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT
loads of stuff from table
set @RecordsFound = @@ROWCOUNT;
END
------------------ C#code ----------------- --------
using (SqlConnection cn = new SqlConnection(dbConn))
{
using (SqlCommand cmd = new SqlCommand(spName, cn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@SearchPhrase", SqlDbType.VarChar, 100));
cmd.Parameters["@SearchPhrase"].Value = id;
cmd.Parameters.Add(new SqlParameter("@RecordsFound", SqlDbType.Int));
cmd.Parameters["@RecordsFound"].Direction = ParameterDirection.Output;
List<News> Data = new List<News>();
try
{
cn.Open();
using (SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.Default))
{
if (rdr.HasRows)
{
while (rdr.Read())
{
Data.Add(new News
{
strNewsTitle = (string)rdr["NewsTitle"],
strNewsDatePosted = (string)rdr["NewsDatePosted"],
strNewsDescription = (string)rdr["NewsDescription"],
strLocationOfImageURL = (string)rdr["ImageURL"],
recordsReturned = Convert.ToInt32(cmd.Parameters["@RecordsFound"].Value)
});
int recordsReturned1 = Convert.ToInt32(cmd.Parameters["@RecordsFound"].Value);
}
int recordsReturned2 = Convert.ToInt32(cmd.Parameters["@RecordsFound"].Value);
}
return Data;
当测试存储过程,我可以看到,@RecordsFound确实返回一个值,所以我认为问题是我的代码。
感谢
乔治
答
如果命令包含输出参数或返回值,直到DataReader关闭,他们将 不可用。
using (SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.Default))
{
if (rdr.HasRows)
{
while (rdr.Read())
{
Data.Add(new News
{
strNewsTitle = (string)rdr["NewsTitle"],
strNewsDatePosted = (string)rdr["NewsDatePosted"],
strNewsDescription = (string)rdr["NewsDescription"],
strLocationOfImageURL = (string)rdr["ImageURL"],
recordsReturned = Convert.ToInt32(cmd.Parameters["@RecordsFound"].Value)
});
// NOT AVAILABLE HERE - READER IS OPEN
// int recordsReturned1 = Convert.ToInt32(cmd.Parameters["@RecordsFound"].Value);
}
// STILL OPEN
//int recordsReturned2 = Convert.ToInt32(cmd.Parameters["@RecordsFound"].Value);
}
}
// Data reader closed and disposed, get output parameter here or never
int recordsReturned2 = Convert.ToInt32(cmd.Parameters["@RecordsFound"].Value);
答
SET NOCOUNT ON;
未启用行计数,因此0为默认值。
或者你是正确的或[本文档(http://msdn.microsoft.com/en-us/library/ms189837.aspx)MSDN上是错误的'的@@ ROWCOUNT功能更新即使当SET NOCOUNT打开.' – Steve 2013-03-21 23:13:14
嗨弗莱姆,删除,仍然返回0,我已经把@RecordsFound在3个地方都返回0 – CareerChange 2013-03-21 23:13:41