ASP.NET中SqlDataSource的ConnectionString使用变量报错求助
解决SqlDataSource无法通过
<%= %>绑定ConnectionString的问题 你遇到的这个问题本质上是ASP.NET服务器控件的属性不能直接用<%= %>表达式赋值——<%= %>是用来在页面渲染阶段输出文本到HTML中的,而服务器控件的属性需要在页面生命周期更早的阶段(比如初始化、加载阶段)就确定值,这时候<%= %>还没执行,所以控件拿不到有效的连接字符串,自然会报错。
给你几个可行的解决方案,按推荐程度排序:
方案1:后台代码直接赋值(最直接)
在页面的后台代码中,找到Page_Load或者OnInit事件,直接给SqlDataSource的ConnectionString属性赋值:
protected void Page_Load(object sender, EventArgs e) { // 直接赋值即可,因为你的连接字符串是静态的,不管是否回发都能使用 BooksRecordTableSource.ConnectionString = main_class.con_string; }
对应的前端标记可以去掉ConnectionString属性,或者留空:
<asp:SqlDataSource ID="BooksRecordTableSource" runat="server"> <!-- 其他配置比如SelectCommand等 --> </asp:SqlDataSource>
方案2:使用数据绑定表达式<%# %>
如果想在前端标记里写绑定逻辑,可以用<%# %>表达式,但需要手动触发数据绑定:
- 前端标记修改为:
<asp:SqlDataSource ID="BooksRecordTableSource" runat="server" ConnectionString="<%# main_class.con_string %>"> </asp:SqlDataSource>
- 后台代码中调用
DataBind()方法(比如在Page_Load里):
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { BooksRecordTableSource.DataBind(); } // 如果需要每次回发都绑定,也可以去掉IsPostBack判断 }
这种方式本质是利用ASP.NET的数据绑定机制,在DataBind()执行时解析<%# %>表达式并赋值。
方案3:通过Web.config配置连接字符串(最规范)
ASP.NET推荐把连接字符串集中配置在Web.config的<connectionStrings>节点里,这样不仅方便维护,还能轻松加密:
- 在Web.config中添加连接字符串:
<configuration> <connectionStrings> <add name="BookDBConnection" connectionString="你的实际连接字符串内容" providerName="System.Data.SqlClient" /> </connectionStrings> <!-- 其他配置节点 --> </configuration>
- 前端标记中使用
<%$ ConnectionStrings:XXX %>表达式引用:
<asp:SqlDataSource ID="BooksRecordTableSource" runat="server" ConnectionString="<%$ ConnectionStrings:BookDBConnection %>"> </asp:SqlDataSource>
这种方式不需要写任何后台代码,ASP.NET会自动从配置文件中读取连接字符串,是生产环境中最常用的做法。
内容的提问来源于stack exchange,提问作者Nusrat ul Hasan
相关产品推荐
相关产品推荐

