sqlConnection/Command using statement + try/catch block
本问题已经有最佳答案,请猛点这里访问。
在内部使用或使用内部尝试/捕获的正确方法是什么?
1 2 3 4 5 6 7 8 | using (SqlConnection connection = CreateSqlConnection(connString)) { using (SqlCommand command = CreateSqlCommand() { try{//open connection + execute command + do something else} catch{//do something} } } |
VS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | try { using (SqlConnection connection = CreateSqlConnection(connString)) { using (SqlCommand command = CreateSqlCommand() { //open connection + execute command + do something else } } } catch { //do something } |
从我的角度来看:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | try { using (SqlConnection connection = CreateSqlConnection(connString)) { using (SqlCommand command = CreateSqlCommand() { //open connection + execute command + do something else } } } catch { //do something } |
以上是正确的方法。
因为,使用这种方法,如果与数据库的连接出现异常,那么将在catch块中捕获。但如果采用第一种方法,就不会。
就我个人而言,我认为最好的方法是——然后不管怎样,连接都会关闭,你可以根据自己的意愿来处理异常情况。
1 2 3 4 5 6 7 8 9 | using (SqlConnection connection = CreateSqlConnection(connString)) { using (SqlCommand command = CreateSqlCommand()) { try { //open connection, execute } catch { // log and handle exception } finally { // check connection state and close if required } } } |
两者都是正确的,因为它们都会在发生错误时关闭可释放的资源。
放置try catch语句的位置应取决于您希望如何处理这些信息,即,如果您希望对与sqlcommand本身有关的错误或更一般的SQL错误作出反应,那么也可能涉及到连接。