Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有没有办法从SQL数据库获取连接字符串,然后通过应用程序使用它?_C#_Asp.net_Sql_.net 4.0_Sql Server 2012 - Fatal编程技术网

C# 有没有办法从SQL数据库获取连接字符串,然后通过应用程序使用它?

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继承的大多数类(例如)都有一个接受连接字符串的构造函数重载 是的,这是可能

我现在正在做一些研究,想知道这是否可能

我有一个应用程序,其中有人使用用户名登录/I希望有一个存储了所有公司id的表,并且根据他们使用哪个id登录,它将使用该公司DB中的连接字符串

我完全知道如何使用web.config实现这一点,但希望尽量减少此处保存的信息,因为我们可能会讨论大约1000个连接字符串。

是的,这是可能的

将连接字符串存储在(main?)数据库中,检索它们并在实例化新的时使用它们

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
中有一个连接到包含所有其他数据库的中央数据库的连接字符串。是的,但我认为这个细节值得一提。