gpt4 book ai didi

c# - 使用 "DbConnection"时,我应该使用 "using"还是 try-catch-finally 来使用 DbConnection.close() 关闭连接?

转载 作者:搜寻专家 更新时间:2023-10-30 21:52:33 26 4
gpt4 key购买 nike

我在网上搜索了一段时间。但是没有找到我的问题的明确答案。在连接到数据库时我应该使用“using”还是我可以直接使用 try-catch-finally?我的意思是:

我不知道是应该在每次完成与数据库的交互时调用 dispose 方法还是直接关闭连接。

    static public List<Category> GetAll()
{
List<Category> CategoryList;

try
{
BaseDAO.Dbconn.Open();
BaseDAO.SetCommand(BaseDAO.CommandAction.Read, "SELECT * FROM Categories");

CategoryList = new List<Category>();

using (DbDataReader reader = BaseDAO.Dbcmd.ExecuteReader())
{
while (reader.Read())
{
int ID = reader.GetInt32(reader.GetOrdinal("CategoryID"));
string Name = reader.GetString(reader.GetOrdinal("CategoryName"));
string Description = reader.GetString(reader.GetOrdinal("Description"));
CategoryList.Add(new Category(ID, Name, Description));
}
}
return CategoryList;
}
catch (Exception ex)
{
BaseDAO.Dbconn.Dispose();
throw ex;
}
finally { BaseDAO.Dbconn.Close(); }

}

“Dbconnection”是静态的,不确定这是否也是一个好的解决方案...

我正在了解 ADO,只是想知道此类问题的最佳答案是什么。

最佳答案

这没有任何区别 - 无论您喜欢什么。 using 子句无论如何都会被编译器转换为 try-finally

编辑 我刚刚注意到您仅在发生异常时才调用 Dispose。您也应该将它移到 finally 子句中。 Dispose 将调用 Close,因此如果您不想,则无需专门调用它。

进一步编辑 鉴于如您所说,您的 DbConnection 是静态的,那么您不想调用 Dispose,但您确实需要调用 Close。但是,不需要使用静态 DbConnection - 连接池将负责有效地处理连接。您的代码应该每次都创建一个新的连接实例。

关于c# - 使用 "DbConnection"时,我应该使用 "using"还是 try-catch-finally 来使用 DbConnection.close() 关闭连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11338072/

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