C# 输出参数始终返回0

C# 输出参数始终返回0,c#,c#-4.0,C#,C# 4.0,任何人都可以看一下,看看他们是否能找到为什么我的输出参数总是返回0 这很可能很简单,我就是看不见 -----------------------SP---------------------------- ALTER PROCEDURE [dbo].[test] -- Add the parameters for the stored procedure here @SearchPhrase VarChar(100), @RecordsFound INT OUTPUT

任何人都可以看一下,看看他们是否能找到为什么我的输出参数总是返回0

这很可能很简单,我就是看不见

-----------------------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
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;
------------------C#代码-------------------------

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
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;
使用(SqlConnection cn=newsqlconnection(dbConn))
{
使用(SqlCommand cmd=newsqlcommand(spName,cn))
{
cmd.CommandType=CommandType.storedProcess;
Add(新的SqlParameter(“@SearchPhrase”,SqlDbType.VarChar,100));
cmd.Parameters[“@SearchPhrase”].Value=id;
Add(新的SqlParameter(“@RecordsFound”,SqlDbType.Int));
cmd.Parameters[“@RecordsFound”].Direction=ParameterDirection.Output;
列表数据=新列表();
尝试
{
cn.Open();
使用(SqlDataReader rdr=cmd.ExecuteReader(CommandBehavior.Default))
{
if(rdr.HasRows)
{
while(rdr.Read())
{
Data.Add(新新闻)
{
strNewsTitle=(字符串)rdr[“新闻标题”],
strNewsDatePosted=(字符串)rdr[“NewsDatePosted”],
strNewsDescription=(字符串)rdr[“NewsDescription”],
strLocationOfImageURL=(字符串)rdr[“ImageURL”],
RecordsReturn=Convert.ToInt32(cmd.Parameters[“@RecordsFound”].Value)
});
int recordsReturned1=Convert.ToInt32(cmd.Parameters[“@RecordsFound”].Value);
}
int recordsReturned2=Convert.ToInt32(cmd.Parameters[“@RecordsFound”].Value);
}
返回数据;
在测试存储过程时,我可以看到@RecordsFound确实返回了一个值,所以我认为问题在于我的代码

谢谢

乔治

未启用行计数,因此默认为0

未启用行计数,因此默认为0。

如果命令包含输出参数或返回值,它们将 在关闭DataReader之前,此选项不可用

如果命令包含输出参数或返回值,它们将 在关闭DataReader之前,此选项不可用


或者您是对的或在MSDN上是错的
即使在“设置无计数”处于启用状态时,@@ROWCOUNT函数也会更新。
Hi-flem,删除后仍返回0,我已将@RecordsFound放在3个位置,全部返回0;或者您是对的或在MSDN上是错的
即使在“设置无计数”处于启用状态时,@@ROWCOUNT函数也会更新。
Hi-flem,删除后仍返回0骨灰盒0,我已将@RecordsFound放在3个位置,全部返回0