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