当我使用连接时,我知道没有必要使用close或dispose。我想知道,我们需要使用open吗?
using (var dbSqlConnection = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString1"]))
{
dbSqlConnection.Open(); // is this required?
}
答案 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);