不SqlCommand.处置关闭连接?
-
09-06-2019 - |
题
我可以用这种方法有效?
using(SqlCommand cmd = new SqlCommand("GetSomething", new SqlConnection(Config.ConnectionString))
{
cmd.Connection.Open();
// set up parameters and CommandType to StoredProcedure etc. etc.
cmd.ExecuteNonQuery();
}
我关切的是:会的处理方法的SqlCommand(被称为退出时使用的方框)关闭基础象或没有?
解决方案
不,处理 SqlCommand
不会影响的连接。一个更好的办法是也包裹 SqlConnection
在采用区块,以及:
using (SqlConnection conn = new SqlConnection(connstring))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand(cmdstring, conn))
{
cmd.ExecuteNonQuery();
}
}
否则,连接是不变的事实,一个命令,该命令是使用它的设置(可能也就是你想要什么?).但请记住,连接应 被设置为好,并且可能更重要的处置于命令。
编辑:
我只是测试这样的:
SqlConnection conn = new SqlConnection(connstring);
conn.Open();
using (SqlCommand cmd = new SqlCommand("select field from table where fieldid = 1", conn))
{
Console.WriteLine(cmd.ExecuteScalar().ToString());
}
using (SqlCommand cmd = new SqlCommand("select field from table where fieldid = 2", conn))
{
Console.WriteLine(cmd.ExecuteScalar().ToString());
}
conn.Dispose();
第一命令被置当使用框退出。连接仍然是开放和良好的第二命令。
因此,处理的命令的肯定不处置的连接,这是使用。
其他提示
SqlCommand.处分是不够的,因为许多SqlCommand(s)可以(重新)使用相同和.集中你的注重和.
我使用这个模式。我有个私人的方法的地方,在我的应用程序:
private void DisposeCommand(SqlCommand cmd)
{
try
{
if (cmd != null)
{
if (cmd.Connection != null)
{
cmd.Connection.Close();
cmd.Connection.Dispose();
}
cmd.Dispose();
}
}
catch { } //don't blow up
}
然后我总是创建SQL命令和连接在一试块(但没有被包裹在一个使用方框),并始终有一个最后框为:
finally
{
DisposeCommand(cmd);
}
连接的对象的财产的命令对象的使用框尴尬在这种情况,但这种模式能够完成任务没有打乱你的代码。
不隶属于 StackOverflow