gpt4 book ai didi

c# - 为 SQLCommand 提供新的 SQLConnection 是否会在新的 SQL 连接上调用 Dispose?

转载 作者:行者123 更新时间:2023-12-02 03:03:44 25 4
gpt4 key购买 nike

序言

据我所知,通常大多数 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 会被释放吗?我尝试运行一些简单的单元测试,但似乎没有结论。

最佳答案

Will this code properly dispose of both objects?

using(var cmd = new SqlCommand("YourSQL", new Connection("YOURCONNECTIONSTRINGHERE"))
{
cmd.ExecuteScalar; //Or whatever type of execution you want.
}

上面的代码不会在连接上调用Dispose()using block 确保在执行 block 后立即调用 cmd.Dispose(),但连接保持打开状态。由于连接没有引用它的对象,因此它最终将被垃圾收集器关闭/处置。

如果您想立即处理命令连接,请尝试:

using (var con = Connection()) // <-- GetConnection() would be a better name
using (var cmd = new SqlCommand(con)
{
cmd.ExecuteScalar;
}

关于c# - 为 SQLCommand 提供新的 SQLConnection 是否会在新的 SQL 连接上调用 Dispose?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59474148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com