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