我有以下代码,当异常发生时,Catch块中的ExecuteReader()将挂起应用程序。
我的问题是悬挂的原因?如果一般发生查询异常,我就无法在Catch块内执行查询?
Try {
// some SQL queries
}
catch (SqlException odbcEx) {
// do some queries with IDbCommand::ExecuteReader()
}
catch (Exception ex) {
// Handle generic ones here.
}
谢谢,
答案 0 :(得分:1)
ExecuteReader()
保持您的SQL连接。你想要做的是围绕它包装一个using语句。此外,您不能执行SQL查询,因为您基本上errored
并且丢失了SQL连接变量的范围。如果需要,可以通过实例化reader
和connection
的新实例在异常块中执行更多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();
}
}
这样你就可以处理你的连接而不是抓住它。