2013-11-18 2 views
0

Я просто делаю некоторые исследования на данный момент в этом и хотел бы знать, если это возможно.Есть ли способ получить строку соединения из базы данных SQL, а затем использовать ее через приложение?

У меня есть приложение, в котором кто-то входит в систему с именем пользователя/я хотел бы иметь таблицу со всеми идентификаторами компании и в зависимости от того, в какой из них они будут входить в систему, будет использоваться строка подключения из БД для этой компании ,

Я полностью осведомлен о том, как это сделать с помощью web.config, но хочу свести к минимуму информацию, хранящуюся здесь, потому что потенциально мы говорим о 1000 цепочках подключения.

+1

Не могли бы вы объяснить немного больше, почему у вас есть 1000 различных строк соединения? У каждого клиента есть своя БД? –

+1

Почему есть 1000 различных строк подключения? У вас действительно есть 1000 различных баз данных? Все, что вы описали, это таблица записей компании, не более того. – David

ответ

2

Обязательно создайте таблицу или измените существующую таблицу.

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 для запуска пула приложений 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 
} 
+0

+1 для пароля! – Keith

2

Да, это возможно.

Сохраните строки подключения в своей (основной?) БД, извлеките их и используйте при создании новых DdConnection s.

Большинство классов, которые наследуют от DbConnection (SqlConnection, например), имеют перегрузку конструктора, которая принимает строку соединения.

+1

В сценарии с курицей и яйцом вы должны иметь возможность подключиться к db, который содержит строки соединений. –

+0

@ DanBracuk - не очень. У вас есть единственная строка соединения в '.config' для центральной базы данных, которая содержит все остальные. – Oded

+0

Правда, но я думал, что подробно стоит упомянуть. –

Смежные вопросы