当使用中定义了endb时,我们是否需要打开db

本文关键字:是否 我们 db 定义 endb | 更新日期: 2023-09-27 18:14:49

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

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

当使用中定义了endb时,我们是否需要打开db

是的,你需要打开它。

using语句调用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();
}

可以看到,使用语句对打开连接没有任何作用。

这取决于你在做什么…如果使用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将为您管理连接,它将打开并处置它

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

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

正如您所说,Dispose方法(在离开using块时自动调用)关闭连接,如果它们仍然打开。

使用<<h3>/h3>
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();
}
  • MSDN - SqlConnection Class
  • MSDN - SqlDataAdapter Class
  • MSDN - SqlCommand Class
  • MSDN -一次性接口
  • MSDN - using语句

不,你不需要这样做,它总是取决于你如何实现我不使用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);
相关文章: