C# try/catch和using语句
下面两组代码产生相同的结果,但我想知道哪一种是使用try…catch块包装的正确方法。他们两个有什么不同 编辑:以下哪项将正确捕获错误,并确保即使出现异常也会关闭连接 1. 2. 区别在于: 如果使用代码2,并且在using语句中使用的connString无效,它将引发异常,因为它不在try catch块中C# try/catch和using语句,c#,error-handling,C#,Error Handling,下面两组代码产生相同的结果,但我想知道哪一种是使用try…catch块包装的正确方法。他们两个有什么不同 编辑:以下哪项将正确捕获错误,并确保即使出现异常也会关闭连接 1. 2. 区别在于: 如果使用代码2,并且在using语句中使用的connString无效,它将引发异常,因为它不在try catch块中 在代码1中,它将捕获该异常。但是您将无法在catch块中使用SqlConnection,区别在于在2 SqlConnection中,conn对象将在catch块完成后被释放。在1中,您的连接
在代码1中,它将捕获该异常。但是您将无法在catch块中使用SqlConnection,区别在于在2 SqlConnection中,conn对象将在catch块完成后被释放。在1中,您的连接将被释放,然后您将进入catch块。两者都可以,这取决于您是否希望在打开连接时捕获错误,当然,您需要在完成连接后关闭连接。通常越早关闭越好。我认为您知道异常处理。 我们在catch块中编写所有代码,这些代码可能导致应用程序出现可疑/未知行为。在这种情况下,catch块处理应用程序的可疑行为。 在上面两段代码的上下文中。。。。 对于第一个-由代码的任何一条语句引起的任何异常都将由catch块处理。 但对于第二个,catch块无法处理使用SqlConnection conn=new sqlconnectionconstring语句引起的异常,因为它在try块之外。要测试这一点,只需在sqlconnection中放置一些错误的连接字符串
希望这能让您更好地理解您的场景 using语句是表示try/catch/finally的语法快捷方式。您可以按照下面的方式修改代码,效果与上面的示例相同
SqlConnection conn
try
{
conn = new SqlConnection(connString)
SqlCommand cmd = new SqlCommand("Drop Table sometable", conn);
cmd.Connection.Open();
cmd.ExecuteNonQuery();
}
catch
{
//
}
finally
{
if(conn != null)
{
conn.Dispose()
}
}
正确的意思是什么?两者都很好,只需在使用第二个示例时确保关闭catch中的连接。或者在finally块中关闭连接。请更正以下哪一项将正确捕获错误,并确保即使出现异常也会关闭连接。
using (SqlConnection conn = new SqlConnection(connString))
{
try
{
SqlCommand cmd = new SqlCommand("Drop Table sometable", conn);
cmd.Connection.Open();
cmd.ExecuteNonQuery();
}
catch
{
//
}
}
SqlConnection conn
try
{
conn = new SqlConnection(connString)
SqlCommand cmd = new SqlCommand("Drop Table sometable", conn);
cmd.Connection.Open();
cmd.ExecuteNonQuery();
}
catch
{
//
}
finally
{
if(conn != null)
{
conn.Dispose()
}
}