Несколько баз данных одно приложение с ASP.NET

Я создал приложение с Visual Studio и ASP.NET 4.0 с MSSQL 2012 Express в качестве бэкэнда.

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

Теперь требования клиента изменились, и он запрашивает отдельную базу данных для каждого года, DATABASE2015 на 2015 год, DATABASE2016 на 2016 год и так далее.

Я перенесу структуру и данные из базы данных за предыдущий год в базу данных за новый год, и это нормально.

Но как я буду подключаться к другой базе данных для разных пользователей в соответствии с их выбором года во время входа в систему?

Кроме того, у меня есть одна строка подключения в web.config, и я ссылался на эту строку подключения во всем проекте как на стороне кода, так и на стороне html для элементов управления asp.net.

Пожалуйста, порекомендуйте.

1 ответ

Как сказал Джон П, то, что просит ваш клиент, станет для вас кошмаром, а подробные отчеты за несколько лет будут очень сложными. Но так как вы попросили решение, так что я думаю, что могу где-нибудь вам рассказать о том, как это сделать.

В вашем файле web.config вы можете сделать строку подключения как,

<add name="YourConnStr" connectionString="Data Source=.;Initial Catalog={0};UID=sa;PWD=password;"
  providerName="System.Data.SqlClient" />

Затем при каждом входе пользователя в систему в соответствии с выбранным годом на экране входа в систему вы будете проверять имя пользователя и пароль из некоторой таблицы базы данных. В этой таблице вы можете создать столбец для хранения имени базы данных, а при успешном входе в систему сохранить это имя в переменной сеанса.

Или вы можете создать другую таблицу с внешним ключом из таблицы Users. В новой таблице вы можете хранить имена баз данных на пользователя в год.

В вашем DAL, получая строку подключения для SqlConnection, вы можете сделать так:

var db = System.Web.HttpContext.Current.Session["dbName"].ToString(); // from session variable
var connection = System.Configuration.ConfigurationManager.ConnectionStrings["YourConnStr"].ConnectionString;
return new SqlConnection(string.Format(connection, db));
Другие вопросы по тегам