我对SQL Server中的SQL批处理有疑问。
假设我使用以下代码执行SqlCommand:
private void Example(SqlConnection connection, SqlTransaction transaction)
{
using (SqlCommand cmd = new SqlCommand("select * from T1; EXECUTE('update T2 set 1=2')", connection, transaction))
{
SqlDataReader reader = cmd.ExecuteReader();
..
..
}
}
现在,由于批处理中的第一个语句成功,我得到NO EXCEPTION和RESULT事件,尽管EXECUTE(''') - 语句显然是错误的。
如果我反转语句,我会得到一个异常,因为在第一个错误之前没有生成结果集。
现在,假设我想在两种情况下检测错误,如何在不生成“冗余”代码的情况下执行此操作,如下所示:
private void Example(SqlConnection connection, SqlTransaction transaction)
{
using (SqlCommand cmd = new SqlCommand("select INTO #T1 from T1; EXECUTE('update T2 set 1=2'); select * from #T1", connection, transaction))
{
SqlDataReader reader = cmd.ExecuteReader();
..
..
}
}
没有这个问题看似奇怪但仍然......我想知道答案,请不要问为什么:)
答案 0 :(得分:1)
你需要读取SqlDataReader,直到它不再返回结果(Read()循环然后是NextResult()并重复)。例外情况是TDS流进一步下降,而SqlClient尚未解析它。