随笔 - 5  文章 - 0 评论 - 9 trackbacks - 7

        在.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>


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

  protected void Page_Load(object sender, EventArgs e)
{
        SqlDataOrder.DataBind();          
//或者用:Page.DataBind();      
    }

        这样ConnectionString才接收到数据库连接字串值,程序才正常执行,当然也可能在.CS中直接指定 
                        SqlDataOrder.ConnectionString = GetSqlConnection.GetSqlDb(); 
        总之这样可以实现动态设置数据库的连接信息,目前是一个解决方法,不知有没有更好的。


 

posted on 2006-05-23 18:58  一代风华  阅读(...)  评论(...编辑  收藏