前言
我了解通常大多数SQL调用都是这样运行的
using(var cnn = new DbConnection("YOURCONNECTIONSTRINGHERE")
{
cnn.Open(); //Open the connection.
using(var cmd = new DbCommand("YourSQL", cnn)
{
cmd.ExecuteScalar; //Or whatever type of execution you want.
}
}
这样可以正确处理连接和命令。
我的问题:这段代码可以正确处理两个对象吗?
using(var cmd = new SqlCommand("YourSQL", new Connection("YOURCONNECTIONSTRINGHERE"))
{
cmd.ExecuteScalar; //Or whatever type of execution you want.
}
实际上,我使用的是一种提供并打开连接的方法。
public SqlConnection Connection()
{
var product = new SQLConnection("ConnectionString");
product.Open();
return product;
}
因此,通话结束时如下所示:
using(var cmd = new SqlCommand("YourSQL", Connection())
{
cmd.ExecuteScalar; //Or whatever type of execution you want.
}
我知道将销毁SqlCommand对象,但是会销毁在using参数声明中创建的SQLConnection吗?我已经尝试运行一些简单的单元测试,但是似乎没有定论。
此代码是否可以正确处理这两个对象?
using(var cmd = new SqlCommand("YourSQL", new Connection("YOURCONNECTIONSTRINGHERE")) { cmd.ExecuteScalar; //Or whatever type of execution you want. }
上面的代码未Dispose()
在连接上调用。该using
块确保cmd.Dispose()
在执行该块后立即调用该方法,但连接保持打开状态。由于该连接没有引用它的对象,因此该连接最终将由垃圾收集器关闭/处置。
如果要立即处理命令和连接,请尝试:
using (var con = Connection()) // <-- GetConnection() would be a better name
using (var cmd = new SqlCommand(con)
{
cmd.ExecuteScalar;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句