ASP 2.0环境下如何将aspx.vb后台变量传入SqlDataSource的Select参数
解决方案
你可以通过以下两种简单方式实现后台变量绑定到SqlDataSource参数,你之前的参数添加失败大概率是参数类型不匹配导致的:你原有逻辑中ClID为Int32类型,但使用了DbType.Guid作为参数类型,二者不一致自然无法生效。
方法1:使用Selecting事件动态赋值(最稳定,推荐)
第一步:修改前端SqlDataSource配置
删除原有ControlParameter,替换为基础参数声明:
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConflictDetection="CompareAllValues" ConnectionString="Data Source=.;Initial Catalog=dataSQL;Persist Security Info=True;User ID=user;Password=$$$$" ProviderName="System.Data.SqlClient" SelectCommand="SELECT ClID, Client_Name FROM [tblClient] WHERE (tblClient.ClID = @ClID )"> <SelectParameters> <!-- 只声明参数名和类型即可,不需要绑定控件 --> <asp:Parameter Name="ClID" Type="Int32" /> </SelectParameters> </asp:SqlDataSource>
第二步:后台添加Selecting事件处理逻辑
在aspx.vb文件中添加如下代码,每次查询执行前会自动将后台变量赋值给参数:
Protected Sub SqlDataSource1_Selecting(sender As Object, e As SqlDataSourceSelectingEventArgs) Handles SqlDataSource1.Selecting ' 直接将后台变量赋值给查询参数,注意变量类型要和声明的Int32匹配 e.Command.Parameters("@ClID").Value = If(ClID Is Nothing, DBNull.Value, ClID) End Sub
方法2:使用数据绑定表达式(前端绑定,无需写参数事件)
第一步:修改前端参数配置,添加绑定表达式
注意不能用<%= %>输出语法,要使用数据绑定语法<%# %>:
<SelectParameters> <asp:Parameter Name="ClID" Type="Int32" DefaultValue="<%# ClID %>" /> </SelectParameters>
第二步:后台触发数据绑定
在Page_Load中调用DataBind方法让绑定表达式生效:
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load If Not IsPostBack Then ' 触发页面绑定,让参数的DefaultValue绑定表达式生效 Me.DataBind() End If End Sub
内容的提问来源于stack exchange,提问作者skessler-Grupp
相关产品推荐
相关产品推荐

