ASP.NET: передача внешней переменной в тег ‹asp:sqldatasource› ASP.NET 2.0

Я разрабатываю ASP.NET 2.0 на основе VB и пытаюсь больше использовать различные теги ASP, которые предоставляет Visual Studio, а не писать все вручную в коде программной части. Я хочу передать внешнюю переменную из сеанса, чтобы определить, кто является пользователем для запроса.

<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.

РЕДАКТИРОВАТЬ СНОВА: Хорошо, похоже, что пользователь был зарезервированным словом. Теперь это работает! Спасибо за другие точки зрения на это. Я не думал о таком подходе.


person Maximillian    schedule 13.10.2008    source источник


Ответы (3)


Я считаю, что Oracle использует двоеточие «:», а не символ «@».


"пользователь", вероятно, является зарезервированным словом. Измените его на «userID» или что-то подобное.

person Wayne    schedule 13.10.2008
comment
РЖУ НЕ МОГУ. У меня тоже такое было несколько раз :D - person Torbjørn; 14.10.2008

Вы можете рассмотреть возможность использования SessionParameter вместо простого параметра, и пусть SqlDataSource извлекает идентификатор пользователя непосредственно из сеанса без какого-либо вмешательства с вашей стороны. Кроме того, пример на странице, указанной выше, похоже, подразумевает, что вы должны использовать ? вместо @user для замены параметра для соединения ODBC. Я думаю, что замена параметра будет выполнена SqlDataSource и не будет передана в Oracle, то есть вместо параметра (правильно цитируемого) перед отправкой запроса в базу данных будет заменено фактическое значение идентификатора пользователя.

<SelectParameters>
  <SessionParameter Name="userID" SessionField="user" DefaultValue="" />
</SelectParameters>
person tvanfosson    schedule 14.10.2008

Использование SessionParameter ASP.NET определенно является правильным решением, поэтому оно у нас есть :)

Используя параметры ASP.NET, вы можете легко включать в свои запросы значения из статических источников, состояние сеанса, строку запроса, значения свойств управления, данные сообщения формы, файлы cookie и профиль пользователя.

person Eilon    schedule 27.10.2008