gpt4 book ai didi

c# - SqlCommand 正确关闭连接

转载 作者:行者123 更新时间:2023-11-30 21:57:24 25 4
gpt4 key购买 nike

我最近一直在做一个旧项目。我在项目中发现以前的同事已经创建了一些用于打开与数据库的连接的常用方法。但是我怀疑这个过程是否真的在查询完成后通过 IDispose 处理连接。

方法如下:

连接数据库。

/// <summary>
/// This method creates a connection object to the database.
/// </summary>
/// <returns>a new SQL Connection</returns>
public SqlConnection ConnectDB()
{
var db = new SqlConnection(ConnectionString);
db.Open();
return db;
}

public SqlDataReader GetDataReader(SqlCommand query)
{
var db = ConnectDB();
query.Connection = db;
var reader = query.ExecuteReader();
return reader;
}

然后我们如下使用GetDataReader

var queryProduct= new SqlCommand
{
CommandText = "SELECT DISTINCT ProductName FROM Products"
};

using (var reader = Interaction.GetDataReader(queryProduct))
{
while (reader.Read())
{
var b = new Product
{
ProductName = reader.GetString(reader.GetOrdinal("ProductName"))
};
products.Add(b);
}
}

您认为这个过程会正确释放所有连接吗?

最佳答案

代码不安全。处理/关闭阅读器不会自动关闭连接,因为您可能希望在同一个连接上执行多个命令。即使你使用 the override 确实关闭了连接,在您进入using block 之前可能发生的异常将使连接保持打开状态。

典型的方式是将连接、命令和读取器包装在using语句中:

using(var con=new SqlConnection(connectionString))
using(var command=new SqlCommand(sql,con))
{
con.Open();
using(var reader=command.ExecuteReader())
{
....
}
}

关于c# - SqlCommand 正确关闭连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30777282/

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