我们是否需要在使用中定义open db whendb?

时间:2014-07-25 06:28:11

标签: c# sql-server sqlconnection

当我使用连接时,我知道没有必要使用close或dispose。我想知道,我们需要使用open吗?

using (var dbSqlConnection = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString1"]))
{             
       dbSqlConnection.Open();  // is this required?
}

4 个答案:

答案 0 :(得分:5)

是的,你需要打开它。

using statement调用finally块中的Dispose方法。它没有打开任何连接。如果您在using语句中的代码未在后面打开您的连接(如SqlDataAdapter),则需要手动打开它。

using (var dbSqlConnection = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString1"]))
{             

}

等于

var dbSqlConnection = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString1"];
try
{

}
finally
{      
    if (dbSqlConnection != null)
        ((IDisposable)dbSqlConnection).Dispose();
}

正如您所看到的, using statement 对打开连接没有任何作用。

答案 1 :(得分:4)

这取决于您正在做什么...如果您使用SqlCommand对象手动执行命令,则在执行命令的任何方法之前,您肯定需要打开连接。但是,如果你正在使用像DataAdapter这样的东西......你没有必要,因为它会为你管理连接。

使用SqlCommand对象...

using (var dbSqlConnection = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString1"]))
{             
       var cmd = new SqlCommand("Your_Sql_Query", con);
       dbSqlConnection.Open();  // is this required?
       cmd.ExecuteNonQuery();
}

使用SqlDataAdapter ...

using (var dbSqlConnection = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString1"]))
    { 
        DataSet ds = new DataSet();
        SqlDataAdapter adapter = new SqlDataAdapter();
        adapter.SelectCommand = new SqlCommand(
            queryString, dbSqlConnection );
        adapter.Fill(ds);
    }

请注意SqlDataAdapter将为您管理连接,它将打开并处理它

答案 2 :(得分:3)

这取决于你在做什么。例如,SqlAdapter会自行打开和关闭连接。

如果你使用SqlCommand然后是,你需要手动打开连接才能使用它 因为SqlConnection的构造函数不会自动打开连接。

正如您所说,Dispose方法(在离开使用块时自动调用)会在连接仍处于打开状态时关闭连接。

使用

using (var dbSqlConnection = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString1"]))
{             
    dbSqlConnection.Open();  // is this required?
}

最后尝试

var dbSqlConnection = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString1"];
try
{
   SqlCommand command = new SqlCommand("SELECT ...", dbSqlConnection);
   dbSqlConnection.Open();
   // execute the SqlCommand e.g. ExecuteReader, ExecuteNonQuery, ExecuteScalar 
}
catch (Exception ex)
{
   // handle the exception
}
finally
{   
    // this gets called even if a exception has occured   
    if (dbSqlConnection != null)
       dbSqlConnection.Dispose();
}

答案 3 :(得分:1)

不,你不需要这样做总是取决于你将如何实现我不使用open()命令

这是使用DataAdapter自动执行此操作的方法

 SqlConnection con = dBClass.SqlConnection(); // return the connection string 

    SqlDataAdapter da = new SqlDataAdapter("[PR_R_TRN_test]", con);
    da.SelectCommand.CommandType = CommandType.StoredProcedure;

    da.SelectCommand.Parameters.Add("@plong_ID", SqlDbType.BigInt).Value = ID;


                    DataSet result = new DataSet();
                    da.Fill(result);