首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在C#上检查存储过程更新结果

如何在C#上检查存储过程更新结果
EN

Stack Overflow用户
提问于 2010-09-21 19:04:46
回答 2查看 469关注 0票数 4

查看我继承的一些源代码,有一段调用SQL存储过程进行更新的代码片段。

如果出现错误,存储过程将返回-1:

代码语言:javascript
复制
IF @@Error <> 0
    BEGIN
        ROLLBACK TRAN
        SELECT -1
        RETURN
    END
COMMIT TRAN
SELECT 0

C#代码如下所示:

代码语言:javascript
复制
    System.Data.SqlClient.SqlDataReader myReader;
    try{
        SqlDbConnection.Open();
        SqlDbCommand.Connection = SqlDbConnection;
        SqlDbCommand.CommandType = System.Data.CommandType.StoredProcedure;
        SqlDbCommand.CommandText = "StoredProcedured_UpdateFoo";
        SqlDbCommand.Parameters.Clear();
        SqlDbCommand.Parameters.Add("@FooData", SqlDbType.DateTime); SqlDbCommand.Parameters["@FooData"].Value = System.DateTime.Now.ToString("yyyy-MM-dd");
        myReader = SqlDbCommand.ExecuteReader();   
        if (myReader.Read())
           {
             if (int.Parse(myReader.GetValue(0).ToString()) == -1) throw new ErrorDataTxRx("Error FOO ");
           }
    } finally {
      if (SqlDbConnection.State != ConnectionState.Closed){
           SqlDbConnection.Close();
      }

      if (myReader != null){              
          if (!myReader.IsClosed) myReader.Close();
      }
    }

我还看到了相同代码的一部分,使用带有Fill方法的System.Data.DataSet()检查相同的内容。

有没有更好的方法来检查返回值是否为-1?

在这种情况下可以使用ExecuteReader吗?

EN

回答 2

Stack Overflow用户

发布于 2010-09-21 20:00:21

正如Jon正确指出的那样,您实际上没有使用SP的返回值,而是实际获得了第一行的第一个值,这是ExecuteScalar以一种更简单的方式所做的事情。

但是,为了从SP (例如,从SP SQL代码中的RETURN @i; )获得返回值,您需要添加一个新参数,并将其方向设置为ReturnValue,如下所示:

代码语言:javascript
复制
SqlParameter returnValueParam = new SqlParameter();
returnValueParam.DbType = DbType.Int32;
returnValueParam.IsNullable = false;
returnValueParam.Direction = ParameterDirection.ReturnValue;
SqlDbCommand.Parameters.Add(returnValueParam);
// execute SP here...
int returnValue = (int)returnValueParam.Value;
票数 3
EN

Stack Overflow用户

发布于 2010-09-21 19:18:47

使用ExecuteNonQuery而不是阅读器,您将获得受影响的行数。

你的问题不够清楚。你可能需要像Lucero写的那样使用ReturnValue。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3759660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档