Передача параметра переменной в db.Query приводит к недопустимому имени переменной: ASP/HTML/WebMatrix

Спасибо, что нашли время, чтобы просмотреть мой пост. Я предоставил ссылки на то, что я прочитал, чтобы попытаться решить эту проблему, а также на учебные материалы, которые я использовал.

Ниже приведен код, с которым у меня возникла проблема. Я пробовал различные перестановки этого кода, чтобы заставить его работать, и я считаю, что основная проблема заключается в моей настройке переменной. Я запрашиваю внешнюю базу данных Oracle.

    @{
    var db = Database.Open("DBNAME");
    var searchterm = "";
    var searchQuery = "SELECT * FROM DATABASE.DATABASETABLE WHERE UNIQUEID = @0";
    if (!Request.QueryString["searchterm"].IsEmpty()){
        searchterm = Request.QueryString["searchterm"];
                                                      }
  var selectedData = db.Query(searchQuery);
  var grid = new WebGrid(source: selectedData);  



}

<!DOCTYPE html>

<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>Movies</title>

    </head>
    <body>
            <form method ="get">
                <label for="searchterm">Please enter you UNIQUEVALUE</label>
                <input type="text" name="searchterm" value="@Request.QueryString["searchterm"]" />
                <input type="submit" value="Search UNIQUEVALUE" />

            </form>
        <div>
                    @grid.GetHtml()
        </div>
    </body>
</html>

Следующее будет работать так, как я хочу

@{
 var db = Database.Open("DBNAME");
        var searchterm = "";
        var searchQuery = "SELECT * FROM DATABASE.DATABASETABLE WHERE UNIQUEID = 'A00000000'";
        if (!Request.QueryString["searchterm"].IsEmpty()){
            searchterm = Request.QueryString["searchterm"];
                                                        }
      var selectedData = db.Query(searchQuery);
      var grid = new WebGrid(source: selectedData); 

}

Но когда я меняю его на следующее, он ломается с этой ошибкой:

@{
        var db = Database.Open("DBNAME");
        var searchterm = "";
        var searchQuery = "SELECT * FROM DATABASE.DATABASETABLE WHERE UNIQUEID = @0";
        if (!Request.QueryString["searchterm"].IsEmpty()){
            searchterm = Request.QueryString["searchterm"];
                                                        }
      var selectedData = db.Query(searchQuery,searchterm);
      var grid = new WebGrid(source: selectedData);  


}

System.Data.OracleClient.OracleException: ORA-01036: недопустимое имя/номер переменной

Line 7:              searchQuery = "SELECT * FROM DATABASE.DATABASETABLE WHERE UNIQUEID = @0";                                            
Line 8:                                                          }
***Line 9:        var selectedData = db.Query(searchQuery,searchterm);***
Line 10:       var grid = new WebGrid(source: selectedData);  

Изменил строку, чтобы она выглядела так, как показано ниже. Даже попытка передать статическое значение в поле параметра у меня не работает.

var selectedData = db.Query(searchQuery,"A00000000");

Я проверил, что этот запрос возвращает данные с помощью Webmatrix, когда я жестко кодирую запрос.

var searchQuery= "SELECT * FROM DATABASENAME.DATABASETABLE WHERE UNIQUE ID = 'A00000000'"
 var selectedData = db.Query(searchQuery);

Я пробовал несколько разных способов цитирования @0 и добавления одинарных кавычек к поисковому запросу после того, как значение было установлено. Любая помощь будет принята с благодарностью!

Обучение/Исследования/Прочитанные статьи:

Поиски в Stack Overflow:

System.Data.OracleClient.OracleException: ORA-01036: недопустимое имя/номер переменной HTML ORA-01036: недопустимое имя/номер переменной\ Недопустимое имя/номер переменной ASP ASP DB.Query()

Поиски в Google:

Параметры Db.Query

Статьи, прочитанные на переполнении стека:

System.Data.OracleClient.OracleException: ORA-01036: недопустимое имя/номер переменной (другой синтаксис/язык)

https://stackoverflow.com/questions/31398488/adding-parameters-to-db-query-using-webmatrix

Построение хорошего поискового запроса с использованием system.data.oracleclient

Win32Exception (0x80004005): время ожидания операции истекло

Подключение html-страниц + Razor к базе данных

Передача параметров в db.query с помощью arangojs

Статьи читаются в гугле:

Что такое эквивалент ObjectQuery.Parameters в DbQuery

Отн. ="nofollow noreferrer">https://social.msdn.microsoft.com/Forums/en-US/91c7fb6d-d1b8-4a7f-aec9-16336dbd619b/access-to-dbquery-parameters-for-logging?forum=adodotnetentityframework< /а>

Учебный материал, использованный для того, чтобы зайти так далеко:

http://www.asp.net/web-pages/overview/getting-started/introduction-aspnet-web-pages-2/displaying-data (прочитайте и активно программируйте с помощью этого руководства).


person Samerious    schedule 08.04.2016    source источник


Ответы (1)


Вы упомянули, что пробовали несколько способов указать параметр в кавычках. Однако это Oracle, и они используют :0 для параметризации. Ты пробовал

var searchQuery = "SELECT * FROM DATABASE.DATABASETABLE WHERE UNIQUEID = ':0'";

Параметр :0 просто добавляет переданную строку в строку sql.

Привязка параметров Oracle

person Knox    schedule 08.04.2016
comment
Привет, Нокс! Спасибо за рассмотрение моего вопроса. Я пробовал этот метод. var searchterm = A00000000; var searchQuery = SELECT * FROM DATABASE.DATABSETABLE WHERE UNIQUEID = '@0'; var selectedData = db.Query(searchQuery,searchterm); Я также пробовал следующее: var searchTerm= ''A00000000'; var selectQuery = SELECT * FROM DATABASE.DATABSETABLE WHERE UNIQUEID = '@0'; И это тоже: var searchTerm= '; var selectQuery = SELECT * FROM DATABASE.DATABSETABLE WHERE UNIQUEID = '@0'; searchTerm = ' + Request.QueryString[searchterm]; + ' - person Samerious; 08.04.2016
comment
большинство примеров относятся к SQL Server. Oracle использует двоеточие вместо знака at для параметризации. Возможно, вам не понадобятся одинарные кавычки, так что попробуйте и это. - person Knox; 08.04.2016
comment
Нокс! ТЫ МОЙ ГЕРОЙ. Изменение позиционного параметра на :0 позволило выполнить запрос. Не могли бы вы указать мне правильное направление для документации, которую вы использовали? Я хотел бы ссылаться на него в будущем. - person Samerious; 08.04.2016
comment
Поскольку вы указали, что единственным отличием был оракул, и у меня был разный опыт работы с другой базой данных, где параметризация не работала, я рассмотрел переполнение стека для параметров и Oracle. Ссылка находится внизу моего обновленного ответа. - person Knox; 08.04.2016