关于c#:sqlConnection / Command using statement + try / catch block

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错误作出反应,那么也可能涉及到连接。