私はいくつかの VB ベースの ASP.NET 2.0 を設計しています。コード ビハインドですべてを手書きするのではなく、Visual Studio が提供するさまざまな ASP タグをもっと活用しようとしています。セッションから外部変数を渡して、クエリのユーザーが誰であるかを識別したいと考えています。
<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
オラクルは、ORA-01036、不正な変数名で私に鳴きます。クエリで変数を間違って宣言していますか?
外部変数は @ プレフィックスが付いた同じ名前を共有していると思いました。私が理解していることから、これは選択を実行するときに必要な値をクエリに配置する必要があります。
編集:さて、これまでのアドバイスに感謝します。最初のエラーは修正されました。クエリの変数宣言には @ ではなく : を使用する必要があります。ORA-01745 無効なホスト/バインド変数名が生成されるようになりました。
もう一度編集: さて、user は予約語だったようです。それは今動作します!これに関する他の視点をありがとう。その方法は考えていませんでした。