0

私はいくつかの 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 は予約語だったようです。それは今動作します!これに関する他の視点をありがとう。その方法は考えていませんでした。

4

4 に答える 4

3

オラクルはアットマーク「@」ではなくコロン「:」を使用していると思います。


「ユーザー」はおそらく予約語です。「userID」などに変更してください。

于 2008-10-13T21:51:20.113 に答える
2

単なるパラメーターの代わりにSessionParameterを使用することを検討し、SqlDataSource がユーザーの介入なしにセッションからユーザー ID を直接抽出できるようにすることをお勧めします。また、上記のリンク先のページの例は、 ? を使用する必要があることを暗示しているようです。ODBC 接続のパラメーター置換用の @user の代わりに。パラメータの置換は SqlDataSource によって行われ、Oracle には渡されないと思います。つまり、クエリをデータベースに送信する前に、パラメータの代わりにユーザー ID の実際の値 (もちろん適切に引用されます) に置き換えられます。

<SelectParameters>
  <SessionParameter Name="userID" SessionField="user" DefaultValue="" />
</SelectParameters>
于 2008-10-14T00:31:02.990 に答える
0
<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="NAME_OF_SUB_Selecting">
      <SelectParameters>
      <asp:parameter name="@user1" defaultvalue ="" />
      </SelectParameters>
      </asp:sqldatasource>


Protected Sub NAME_OF_SUB_Selecting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceSelectingEventArgs) Handles Data_Stores.Selecting
   e.Command.Parameters("@user1").Value = Membership.GetUser.ProviderUserKey.ToString()
End Sub
于 2008-10-30T07:11:53.867 に答える
0

ASP.NET の SessionParameter を使用することは間違いなくここに行く方法です - それが私たちがそれを持っている理由です:)

ASP.NET パラメーターを使用すると、静的ソース、セッション状態、クエリ文字列、コントロール プロパティ値、フォーム ポスト データ、Cookie、およびユーザー プロファイルからの値をクエリに簡単に含めることができます。

于 2008-10-27T00:57:05.937 に答える