在类中存储 ConnectionString

问题描述 投票:0回答:1

我有一个用连接字符串初始化的类,类中的各种函数使用它来访问引用的 SQL 数据库。目前,该类将传入的 ConnectionString 存储在私有只读字符串中。

因为我在函数中写了第一百次 using 语句:

using (SqlConnection SQLCon = new SqlConnection(_ConnectionString))

我想知道将连接字符串实际存储在私有只读 SqlConnection 中而不是字符串形式会更好吗?我猜这会节省多次创建 SqlConnection 的成本,代价是 SqlConnection 对象与字符串的内存使用量稍微多一点?

这是否也有利于后台运行的连接池和垃圾清理进程?

我是否正确,无论池和 GC 是否有好处,这都是更好的方法??

如果我这样做了,使用 using 语句来实际使用连接是否仍然有益,或者这会被视为愚蠢,我应该每次都使用 .Open() 和 .Close() 吗?

using(_SqlCon)
{
   _SqlCon.Open();
   ...
}
c# connection-string
1个回答
0
投票

不,尝试重新使用同一个连接对象不是一个好主意。出于一个原因,在

using
块结束后,连接被 disposed 并且不再可用。另一方面,if 强制您在应用程序中串行运行所有查询,并行工作的可能性有限。所以你可能会想要根本没有
using
块,而这也是一个错误

你可以做的是有一个快捷的方法来返回一个新的连接:

public static class DB
{
    public static SqlConnection CreateCn()
    {
        return new SqlConnection(_connectionString);
    }
}

然后问题中的第一个片段可以简化为:

using var SQLCon = DB.CreateCn();

我可能还会在名称中拼出完整的

Connection
,因为您可以在 IDE 中完成以保持快速打字。

但我倾向于更进一步,并将这种方法设为 private,这样所有数据库访问都必须作为此类的一部分进行。然后我将在此处构建一个公共方法来包装每个查询,因此应用程序的其余部分将调用像

DB.SomeQuery()
这样的代码,并且您永远不会在主应用程序中看到 SQL 字符串。随着应用程序的增长,我也可能将它分解成一个单独的程序集,这样我就可以有额外的类来对不同的区域进行逻辑分组,但仍然限制对核心连接的访问。

© www.soinside.com 2019 - 2024. All rights reserved.