C# 有没有办法从SQL数据库获取连接字符串,然后通过应用程序使用它?
我现在正在做一些研究,想知道这是否可能 我有一个应用程序,其中有人使用用户名登录/I希望有一个存储了所有公司id的表,并且根据他们使用哪个id登录,它将使用该公司DB中的连接字符串 我完全知道如何使用web.config实现这一点,但希望尽量减少此处保存的信息,因为我们可能会讨论大约1000个连接字符串。是的,这是可能的 将连接字符串存储在(main?)数据库中,检索它们并在实例化新的时使用它们 从C# 有没有办法从SQL数据库获取连接字符串,然后通过应用程序使用它?,c#,asp.net,sql,.net-4.0,sql-server-2012,C#,Asp.net,Sql,.net 4.0,Sql Server 2012,我现在正在做一些研究,想知道这是否可能 我有一个应用程序,其中有人使用用户名登录/I希望有一个存储了所有公司id的表,并且根据他们使用哪个id登录,它将使用该公司DB中的连接字符串 我完全知道如何使用web.config实现这一点,但希望尽量减少此处保存的信息,因为我们可能会讨论大约1000个连接字符串。是的,这是可能的 将连接字符串存储在(main?)数据库中,检索它们并在实例化新的时使用它们 从DbConnection继承的大多数类(例如)都有一个接受连接字符串的构造函数重载 是的,这是可能
DbConnection
继承的大多数类(例如)都有一个接受连接字符串的构造函数重载 是的,这是可能的
将连接字符串存储在(main?)数据库中,检索它们并在实例化新的时使用它们
从
DbConnection
继承的大多数类(例如)都有一个接受连接字符串的构造函数重载 确保创建表或修改现有表
CREATE TABLE Connection
(
Id INT IDENTITY NOT NULL PRIMARY KEY
,ConnectionString VARCHAR(100) NOT NULL
);
INSERT INTO Connection (ConnectionString)
VALUES ('Server=myServerAddress;Database=myDataBase;Trusted_Connection=True;');
我建议不要在表的内容未加密时将密码存储在连接字符串中。设置具有Sql Server权限的域帐户,以便在下运行IIS应用程序池或Windows服务
const string Query = "SELECT ConnectionString FROM Connection WHERE Id = @Id";
public string GetConnectionString(int id)
{
using(var connection = GetConnection())
using(var command = new SqlCommand(Query, connection))
{
command.Parameters.AddWithValue("@Id", id);
connection.Open();
using(var reader = command.ExecuteReader())
{
if(reader.Read())
{
return Convert.ToString(reader["ConnectionString"]);
}
}
}
}
var connectionString = GetConnectionString(1);
using(var connection = new SqlConnection(connectionString))
{
//logic
}
确保创建表或修改现有表
CREATE TABLE Connection
(
Id INT IDENTITY NOT NULL PRIMARY KEY
,ConnectionString VARCHAR(100) NOT NULL
);
INSERT INTO Connection (ConnectionString)
VALUES ('Server=myServerAddress;Database=myDataBase;Trusted_Connection=True;');
我建议不要在表的内容未加密时将密码存储在连接字符串中。设置具有Sql Server权限的域帐户,以便在下运行IIS应用程序池或Windows服务
const string Query = "SELECT ConnectionString FROM Connection WHERE Id = @Id";
public string GetConnectionString(int id)
{
using(var connection = GetConnection())
using(var command = new SqlCommand(Query, connection))
{
command.Parameters.AddWithValue("@Id", id);
connection.Open();
using(var reader = command.ExecuteReader())
{
if(reader.Read())
{
return Convert.ToString(reader["ConnectionString"]);
}
}
}
}
var connectionString = GetConnectionString(1);
using(var connection = new SqlConnection(connectionString))
{
//logic
}
您能再解释一下为什么有1000个不同的连接字符串吗?每个客户端都有自己的数据库吗?为什么有1000个不同的连接字符串?你真的有1000个不同的数据库吗?您所描述的只是一个公司记录表,仅此而已。您能再解释一下为什么有1000个不同的连接字符串吗?每个客户端都有自己的数据库吗?为什么有1000个不同的连接字符串?你真的有1000个不同的数据库吗?您所描述的只是一个公司记录表,仅此而已。在鸡和蛋的情况下,您必须能够连接到包含连接字符串的数据库。@DanBracuk-不太可能。您在
.config
中有一个连接到包含所有其他连接的中央数据库的连接字符串。是的,但我认为这个细节值得一提。在鸡和蛋的情况下,您必须能够连接到包含连接字符串的数据库。@DanBracuk-不太可能。您在.config
中有一个连接到包含所有其他数据库的中央数据库的连接字符串。是的,但我认为这个细节值得一提。