C# 获取SQL连接碎片,以不同的方式连接到数据库

C# 获取SQL连接碎片,以不同的方式连接到数据库,c#,sql,sql-server-2008,.net-2.0,C#,Sql,Sql Server 2008,.net 2.0,我们有多个数据库服务器。在其中一台服务器上,我们有一个主配置表,其中包含有关代理应该使用的DB服务器和数据库名称的说明 目前,每个数据库上始终有2个连接,即使我们正在修复的数据库未被使用。然而,我们正试图找到一种方法,使我们的连接不会到处都是,并减轻我们的数据库服务器上的一些压力 经过大量的研究,我们发现一些文章说,将所有连接都连接到一个中心位置,然后通过SQLConnection对象更改我们正在使用的数据库。这似乎有点迂回,但可能有效 所以我想知道其他人在这种情况下会怎么做 当前路径为: -用

我们有多个数据库服务器。在其中一台服务器上,我们有一个主配置表,其中包含有关代理应该使用的DB服务器和数据库名称的说明

目前,每个数据库上始终有2个连接,即使我们正在修复的数据库未被使用。然而,我们正试图找到一种方法,使我们的连接不会到处都是,并减轻我们的数据库服务器上的一些压力

经过大量的研究,我们发现一些文章说,将所有连接都连接到一个中心位置,然后通过SQLConnection对象更改我们正在使用的数据库。这似乎有点迂回,但可能有效

所以我想知道其他人在这种情况下会怎么做

当前路径为:

-用户登录 -System access ConfigTable以确定哪个数据库用户要连接。 -系统将代理连接设置加载到该用户的内存会话中。 -现在,每个请求都直接命中该用户数据库


有更有效的方法吗?

晚些时候打开连接,早些关闭

例如:

string result;
using (var con = new SqlConnection(...))
{
    con.Open();
    var com = con.CreateCommand();
    com.CommandText = "select 'hello world'";
    result = com.ExecuteScalar();
}
Windows操作系统将确保高效地共享和重用连接。而且,由于您仅在需要连接时使用连接,因此周围没有空闲连接

编辑:Windows仅缓存字面上相同的连接字符串,因此如果在连接字符串中使用Initial Catalog=,则可能会因为一台服务器需要500多个连接池而影响性能

因此,如果您有4台服务器,其中包含大量数据库,请确保只使用4个连接字符串。连接后,将数据库切换到:

com.CommandText = "use <dbname>";
com.ExecuteNonQuery();
或使用由三部分组成的名称进行查询,如:

select * from <dbname>.dbo.YourTable

我们的应用程序是.NET2.0,这与我们目前使用的类似。“这证明效率太低了。”Ryan Ternier:答案是为几个服务器编辑的,其中有很多服务器databases@RyanTernier:这证明效率太低了-可能需要更具体一些…@Andomar,你是说连接到每台服务器上的中央数据库,如master或其他一些登录点,然后将连接数据库更改为你想要的希望这将支持MSDN页面上研究的内容。如果您不使用初始目录,但在CS中有DB名称,该怎么办。这会导致它被单独缓存吗?@Ryan Ternier:是的,没错。现在我重读了你的问题,如果我用主数据库替换中心位置,你几乎是自己说的。