我正在设计一些基于 VB 的 ASP.NET 2.0,并且我试图更多地利用 Visual Studio 提供的各种 ASP 标签,而不是在代码隐藏中手工编写所有内容。我想从 Session 中传递一个外部变量来识别查询的用户是谁。
<asp:sqldatasource id="DataStores" runat="server" connectionstring="<%$ ConnectionStrings:MY_CONNECTION %>"
providername="<%$ ConnectionStrings:MY_CONNECTION.ProviderName %>"
selectcommand="SELECT THING1, THING2 FROM DATA_TABLE WHERE (THING2 IN (SELECT THING2 FROM RELATED_DATA_TABLE WHERE (USERNAME = @user)))"
onselecting="Data_Stores_Selecting">
<SelectParameters>
<asp:parameter name="user" defaultvalue ="" />
</SelectParameters>
</asp:sqldatasource>
在我背后的代码中,我有:
Protected Sub Data_Stores_Selecting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceSelectingEventArgs) Handles Data_Stores.Selecting
e.Command.Parameters("user").Value = Session("userid")
End Sub
Oracle 用 ORA-01036(非法变量名)对我大喊大叫。我在查询中声明变量错误吗?
我认为外部变量与 @ 前缀共享相同的名称。据我了解,这应该是在执行选择时将我想要的值放入查询中。
编辑:好的,感谢到目前为止的建议,第一个错误已得到纠正,我需要使用 : 而不是 @ 用于查询中的变量声明。现在它生成一个 ORA-01745 无效的主机/绑定变量名。
再次编辑:好的,看起来 user 是一个保留字。现在可以了!感谢您对此的其他观点。我没有想到这种方法。