gpt4 book ai didi

c# - 让数据库连接保持打开状态?

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

我的网络应用程序有以下类:

public class DatabaseProvider {
private readonly IDbConnection _cn;

public DatabaseProvider(IDbConnection cn) {
_cn = cn;
}

public void ExecuteNonQuery(string query) {
// Execute the query
var cmd = _cn.CreateCommand();
cmd.CommandText = query;
cmd.ExecuteNonQuery();
}
}

使用以下代码(使用 Microsoft Unity)声明 IDbConnection 依赖项:

container.RegisterType<IDbConnection>(new InjectionFactory(c => {
var cn = new SqlConnection("...");
cn.Open();
return cn;
}));

这允许我像这样换出与 SQLite 的连接:

container.RegisterType<IDbConnection>(new InjectionFactory(c => {
var cn = new SQLiteConnection("Data Source=:memory:;Version=3;");
cn.Open();
return cn;
}));

我在测试时使用 SQLite,连接必须保持打开状态,否则数据会丢失。因此我不能只在需要时打开和关闭连接。

我总是在需要时打开与数据库的连接,想知道这是否适用于大型应用程序?

对于如何改进这一点的任何建议,我将不胜感激。谢谢

最佳答案

作为 ADO.NET 中的一般规则,必须尽快关闭连接。

连接从连接池中重用,是稀缺资源。

推荐的方法是使用 () {} 结构。

SQL Server Connection Pooling (ADO.NET)

我们强烈建议您在使用完后始终关闭连接,以便连接返回到连接池。您可以使用 Connection 对象的 Close 或 Dispose 方法,或者通过在 C# 中的 using 语句 或 Visual Basic 中的 Using 语句中打开所有连接来执行此操作。未明确关闭的连接可能不会添加或返回到池中。有关详细信息,请参阅使用语句(C# 引用)或如何:处理 Visual Basic 的系统资源 (Visual Basic)。

所以,我建议你做一个接口(interface)IDbProvider,然后做2个实现:SqlServerProviderSQLiteProvider,并在里面处理打开和关闭连接他们。然后使用 Unity 绑定(bind)一个或另一个提供程序。

关于c# - 让数据库连接保持打开状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12819728/

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