Несколько баз данных одно приложение с 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));