從繼承的一些源代碼看,有一小段代碼調用SQL存儲過程進行更新。如何檢查C#上的存儲過程更新結果#
存儲過程返回-1萬一出了差錯:
IF @@Error <> 0
BEGIN
ROLLBACK TRAN
SELECT -1
RETURN
END
COMMIT TRAN
SELECT 0
的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();
}
}
我也看到了相同的代碼的一部分,檢查相同用Fill方法使用System.Data.DataSet()。
有沒有更好的方法來檢查返回值是否爲-1?
在這種情況下可以使用ExecuteReader嗎?
-1 ....結果集的第一行與返回值根本不同。 SP的實際返回值(數值)可用於指示錯誤/狀態信息。檢查SP調用語法,地址爲http://msdn.microsoft.com/en-us/library/aa258848(SQL.80).aspx – TomTom 2010-09-21 11:18:35
@TomTom:雖然這當然是真的,但看看現有的代碼 - 它*是*閱讀結果集的第一個值,就像填充一個'DataSet'一樣。假設這是OP所需要的,我相信'ExecuteScalar'會做同樣的事情,更簡單。 – 2010-09-21 11:20:59
+1 - 不會被OP使用的稍微不正確的術語所迷惑。 ;) – Lucero 2010-09-21 12:01:47