ASP.NET的多数据库单一应用程序

时间:2016-10-03 12:09:36

标签: c# sql asp.net sql-server multiple-databases

我使用Visual Studio和ASP.NET 4.0创建了一个带有MSSQL 2012 Express后端的应用程序。

最初没有规划多个数据库,因此我使用单个数据库的单个连接字符串对应用进行了相应的编程。

现在,客户的要求发生了变化,他要求每年提供单独的数据库, 2015年DATABASE2015,2016年DATABASE2016 ,依此类推。

我会将上一年数据库中的结构和数据迁移到新年数据库,这很好。

但是,如何根据登录时的年份选择为不同的用户连接到不同的数据库?

另外,我在web.config中有一个连接字符串,我在代码端和html端为我的项目引用了连接字符串,用于asp.net控件。

请告知。

1 个答案:

答案 0 :(得分:1)

正如Jon P所说,您的客户所要求的将是您管理的噩梦,并且大量的多年报告将非常困难。但是既然你已经提出了解决方案,那么我想我可以指导你如何做到这一点。

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));