在.Net2.0中增加了新的数据库连接字符串的绑定语句," ConnectionString="<%$ ConnectionStrings:SomeValue %>",我在一个项目中遇到这样一个问题,一套系统有两个结构一样的Sql Server数据库,这两个数据库共用一个系统代码,如何在设计中动态的选择数据库连接信息登录相应的数据库呢?例如在Web.config中有如下的设置:
那么如何在页面视图中如何动态的选择这个连接字符串呢?首先ConnectionString="<%$ ConnectionStrings:SomeValue %>"不支持数据绑定,那么我想到用ConnectionString="<%# ConnectionStrings:SomeValue %>"这个数据绑定,因此增加一个静态类变量,用来返回登录的数据库连接信息,代码如下:
在首页Login.aspx登录页面的代码:
在页面视图中设置:
<connectionStrings>
<add name="cc_2005" connectionString="Data Source=cc;Initial Catalog=cc_2005;Integrated Security=True" providerName="System.Data.SqlClient"/>
<add name="cc_2006" connectionString="Data Source=cc;Initial Catalog=cc_2006;Integrated Security=True" providerName="System.Data.SqlClient"/>
</connectionStrings>
<add name="cc_2005" connectionString="Data Source=cc;Initial Catalog=cc_2005;Integrated Security=True" providerName="System.Data.SqlClient"/>
<add name="cc_2006" connectionString="Data Source=cc;Initial Catalog=cc_2006;Integrated Security=True" providerName="System.Data.SqlClient"/>
</connectionStrings>
那么如何在页面视图中如何动态的选择这个连接字符串呢?首先ConnectionString="<%$ ConnectionStrings:SomeValue %>"不支持数据绑定,那么我想到用ConnectionString="<%# ConnectionStrings:SomeValue %>"这个数据绑定,因此增加一个静态类变量,用来返回登录的数据库连接信息,代码如下:
public class GetSqlConnection
{
public static string SqlStr;
public GetSqlConnection()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
}
{
public static string SqlStr;
public GetSqlConnection()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
}
在首页Login.aspx登录页面的代码:
//选择年份,返回选择的数据库
private void GetSqlStr()
{
if (lblLoginYear.Text == "2005年度")
{
GetSqlConnection .SqlStr= ConfigurationManager.ConnectionStrings["cc_2005"].ConnectionString;
}
else if (lblLoginYear.Text == "2006年度")
{
GetSqlConnection.SqlStr = ConfigurationManager.ConnectionStrings["cc_2006"].ConnectionString;
}
else
GetSqlConnection.SqlStr = null;
}
private void GetSqlStr()
{
if (lblLoginYear.Text == "2005年度")
{
GetSqlConnection .SqlStr= ConfigurationManager.ConnectionStrings["cc_2005"].ConnectionString;
}
else if (lblLoginYear.Text == "2006年度")
{
GetSqlConnection.SqlStr = ConfigurationManager.ConnectionStrings["cc_2006"].ConnectionString;
}
else
GetSqlConnection.SqlStr = null;
}
在页面视图中设置:
<asp:SqlDataSource ID="SqlDataOrder" runat="server" ConnectionString="<%# GetSqlConnection.SqlStr %>" SelectCommand="SELECT * FROM [Order]" ></asp:SqlDataSource>
最后运行程序,显示“ConnectionString 属性尚未初始化”,说明ConnectionString并没有接收到变量值,查找分析后发现<%# %>这种绑定是在该控件执行数据绑定后才会执行,用以下代码即可:
protected void Page_Load(object sender, EventArgs e)
{
SqlDataOrder.DataBind(); //或者用:Page.DataBind();
}
{
SqlDataOrder.DataBind(); //或者用:Page.DataBind();
}
这样ConnectionString才接收到数据库连接字串值,程序才正常执行,当然也可能在.CS中直接指定
SqlDataOrder.ConnectionString = GetSqlConnection.GetSqlDb();
总之这样可以实现动态设置数据库的连接信息,目前是一个解决方法,不知有没有更好的。