在.Net2.0中增加了新的数据库连接字符串的绑定语句," ConnectionString="<%$ ConnectionStrings:SomeValue %>",我在一个项目中遇到这样一个问题,一套系统有两个结构一样的Sql Server数据库,这两个数据库共用一个系统代码,如何在设计中动态的选择数据库连接信息登录相应的数据库呢?例如在Web.config中有如下的设置:
<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: 在此处添加构造函数逻辑
//
}
}
在首页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;
}
在页面视图中设置:
<asp:SqlDataSource ID="SqlDataOrder" runat="server" ConnectionString="<%# GetSqlConnection.SqlStr %>" SelectCommand="SELECT * FROM [Order]" ></asp:SqlDataSource>
protected void Page_Load(object sender, EventArgs e)
{
SqlDataOrder.DataBind(); //或者用:Page.DataBind();
}




那么如何在页面视图中如何动态的选择这个连接字符串呢?首先ConnectionString="<%$ ConnectionStrings:SomeValue %>"不支持数据绑定,那么我想到用ConnectionString="<%# ConnectionStrings:SomeValue %>"这个数据绑定,因此增加一个静态类变量,用来返回登录的数据库连接信息,代码如下:










在首页Login.aspx登录页面的代码:














在页面视图中设置:

最后运行程序,显示“ConnectionString 属性尚未初始化”,说明ConnectionString并没有接收到变量值,查找分析后发现<%# %>这种绑定是在该控件执行数据绑定后才会执行,用以下代码即可:




这样ConnectionString才接收到数据库连接字串值,程序才正常执行,当然也可能在.CS中直接指定
SqlDataOrder.ConnectionString = GetSqlConnection.GetSqlDb();
总之这样可以实现动态设置数据库的连接信息,目前是一个解决方法,不知有没有更好的。
· Linux系列:如何用perf跟踪.NET程序的mmap泄露
· 日常问题排查-空闲一段时间再请求就超时
· Java虚拟机代码是如何一步一步变复杂且难以理解的?
· 领域驱动的事实与谬误 一 DDD 与 MVC
· SQL Server 2025 中的改进
· C#/.NET/.NET Core优秀项目和框架2025年4月简报
· Linux系列:如何用perf跟踪.NET程序的mmap泄露
· 为什么AI多轮对话那么傻?
· .NET + AI | Semantic Kernel vs Microsoft.Extension
· windows11 安装WSL2详细过程