當我運行下面的代碼片斷爲什麼SqlCommand.ExecuteNonQuery引發的SqlException包含所有PRINT作爲錯誤?
try
{
using (SqlConnection conn = new SqlConnection("I'm shy"))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "PRINT 'A';PRINT 'B';PRINT 'C';RAISERROR('SQL_Error', 18, 1)";
cmd.ExecuteNonQuery();
}
}
}
catch (SqlException ex)
{
MessageBox.Show(ex.Message);
}
我得到以下信息:
SQL_Error
A
B
C
和ex.Errors
具有4個條目(3 SqlError
的對應於打印具有0的SqlError.Class
(VS 18爲真實錯誤)
但是,如果我用ExecuteScalar
替換ExecuteNonQuery
,我會得到預期的結果:
的信息是SQL_Error
我只有在ex.Errors
一個條目...
有沒有辦法避免的cmd.ExecuteNonQuery
奇怪的行爲?
WExecuteNonQuery返回受影響的行數(類似於@@ ROWCOUNT),並且它有一些帶-1返回值的特權。 ExecuteReader返回一個SqlDataReader。儘管你對ExecuteScalar是正確的。 – Kevin 2010-02-01 20:40:21
謝謝,我的意思是記錄集,而不是數據表 – madatanic 2010-02-01 20:47:01