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

sys*_*out 4 c# stored-procedures

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

如果出现问题,存储过程返回-1:

IF @@Error <> 0
    BEGIN
        ROLLBACK TRAN
        SELECT -1
        RETURN
    END
COMMIT TRAN
SELECT 0
Run Code Online (Sandbox Code Playgroud)

C#代码是这样的:

    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();
      }
    }
Run Code Online (Sandbox Code Playgroud)

我也看到了相同代码的一部分,使用带有Fill方法的System.Data.DataSet()检查相同的东西.
有没有更优雅的方法来检查返回值是否为-1?
在这种情况下使用ExecuteReader是否可以?

Jon*_*eet 6

你试过用过ExecuteScalar吗?这是为返回单个值的查询而设计的:

执行查询,并返回查询返回的结果集中第一行的第一列.其他列或行将被忽略