从catch块调用ExecuteReader()

时间:2014-08-04 09:19:37

标签: sqlexception

我有以下代码,当异常发生时,Catch块中的ExecuteReader()将挂起应用程序。

我的问题是悬挂的原因?如果一般发生查询异常,我就无法在Catch块内执行查询?

Try {
   // some SQL queries
}
catch (SqlException odbcEx) {
   // do some queries with IDbCommand::ExecuteReader()
}
catch (Exception ex) {
   // Handle generic ones here.
}

谢谢,

1 个答案:

答案 0 :(得分:1)

ExecuteReader()保持您的SQL连接。你想要做的是围绕它包装一个using语句。此外,您不能执行SQL查询,因为您基本上errored并且丢失了SQL连接变量的范围。如果需要,可以通过实例化readerconnection的新实例在异常块中执行更多SQL,但在此之前理想情况下应关闭现有连接。如果您使用datatable,则无法保持SQL连接。也许值得一看。

例如:

using (var conn = new SqlConnection("ConnectionString"))
{
try {
   // some SQL queries
}
catch (SqlException odbcEx) {
   // do some queries with IDbCommand::ExecuteReader()
}
catch (Exception ex) {
   // Handle generic ones here.
}
finally {
  conn.Close();
}
}

这样你就可以处理你的连接而不是抓住它。