当使用中定义了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?
}
是的,你需要打开它。
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块时自动调用)关闭连接,如果它们仍然打开。
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);