【问题标题】:Passing variable parameter to db.Query results in illegal variable name: ASP/HTML/WebMatrix将变量参数传递给 db.Query 导致非法变量名:ASP/HTML/WebMatrix
【发布时间】:2016-07-29 05:47:42
【问题描述】:

感谢您抽出宝贵时间查看我的帖子。 我提供了我所阅读内容的链接以尝试解决此问题以及我使用的学习材料。

以下是我遇到问题的代码。我尝试了此代码的各种排列以使其工作,我相信主要问题在于我的变量设置。我正在查询一个外部 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 上完成的搜索:

数据库查询参数

在堆栈溢出时读取的文章:

System.Data.OracleClient.OracleException: ORA-01036: illegal variable name/number(不同的语法/语言)

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

Constructing a good search query using system.data.oracleclient

Win32Exception (0x80004005): The wait operation timed out

Connecting html pages + Razor to database

Passing parameters to db.query with arangojs

在 google 上阅读的文章:

What is the Equivalent of ObjectQuery.Parameters in DbQuery

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/introducing-aspnet-web-pages-2/displaying-data(通读本教程并积极编写代码。)

【问题讨论】:

    标签: html asp.net oracle parameters webmatrix


    【解决方案1】:

    您提到您尝试了几种方法来引用参数。但是,这是 Oracle,他们使用 :0 进行参数化。你试过了吗

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

    :0 参数只是将传递的字符串放入 sql 字符串中。

    Oracle parameter binding

    【讨论】:

    • 嗨诺克斯!感谢您审查我的问题。我试过那种方法。 var searchterm = "A00000000"; var searchQuery = "SELECT * FROM DATABASE.DATABASETABLE WHERE UNIQUEID = '@0'"; var selectedData = db.Query(searchQuery,searchterm);我还尝试了以下方法: var searchTerm="''A00000000'"; var selectQuery = "SELECT * FROM DATABASE.DATABASETABLE WHERE UNIQUEID = '@0'";这也是: var searchTerm= "'"; var selectQuery = "SELECT * FROM DATABASE.DATABASETABLE WHERE UNIQUEID = '@0'"; searchTerm = "'" + Request.QueryString[searchterm"]; + "'"
    • 大部分示例都是针对 SQL Server 的。 Oracle 使用冒号而不是 at 符号进行参数化。你可能不需要单引号,所以也试试看。
    • 诺克斯!你是我的英雄。将位置参数更改为 :0 允许查询通过。对于您使用的文档,您能否为我指明正确的方向?我想在将来参考它。
    • 既然您已经指出唯一的区别是 oracle,并且我对参数化不起作用的不同数据库有不同的体验,我查看了参数和 Oracle 的堆栈溢出。该链接位于我更新答案的底部。
    猜你喜欢
    • 1970-01-01
    • 2020-02-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多