当我运行下面的代码片断为什么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