将变量参数传递给db.Query会导致非法变量名:ASP/HTML/WebMatrix
感谢您抽出时间查看我的帖子。 我已经提供了我所读到的试图解决这个问题的链接,以及我所使用的学习材料 下面是我遇到问题的代码。我尝试过对这段代码进行各种排列以使其正常工作,我相信主要问题在于我的变量设置。我正在查询外部Oracle数据库将变量参数传递给db.Query会导致非法变量名:ASP/HTML/WebMatrix,html,asp.net,oracle,parameters,webmatrix,Html,Asp.net,Oracle,Parameters,Webmatrix,感谢您抽出时间查看我的帖子。 我已经提供了我所读到的试图解决这个问题的链接,以及我所使用的学习材料 下面是我遇到问题的代码。我尝试过对这段代码进行各种排列以使其正常工作,我相信主要问题在于我的变量设置。我正在查询外部Oracle数据库 @{ var db = Database.Open("DBNAME"); var searchterm = ""; var searchQuery = "SELECT * FROM DATABASE.DATABASETABLE WH
@{
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 = @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,并在设置值后向搜索词添加单引号。任何帮助都将不胜感激
学习/研究/文章阅读:
对堆栈溢出执行的搜索:
System.Data.OracleClient.OracleException:ORA-01036:非法变量名称/编号
HTML ORA-01036:非法变量名称/编号\
ASP非法变量名/编号
ASP DB.Query()
在谷歌上完成的搜索:
查询参数
阅读有关堆栈溢出的文章:
(不同的语法/语言)
谷歌阅读的文章:
用于实现这一目标的学习材料:
(通读本教程,并积极编写代码。)您提到您尝试了几种引用参数的方法。但是,这是Oracle,他们使用:0进行参数化。你试过了吗
var searchQuery = "SELECT * FROM DATABASE.DATABASETABLE WHERE UNIQUEID = ':0'";
:0参数只是将传递的字符串放入sql字符串中
你好,诺克斯!谢谢你复习我的问题。我试过那种方法。var searchterm=“A00000000”;var searchQuery=“SELECT*FROM DATABASE.DATABASETABLE,其中UNIQUEID='@0';var selectedData=db.Query(searchQuery,searchterm);我还尝试了以下方法:var searchTerm=“'a0000000'”;var selectQuery=“SELECT*FROM DATABASE.DATABASETABLE,其中UNIQUEID='@0';还有:var searchTerm=“”;var selectQuery=“SELECT*FROM DATABASE.DATABASETABLE,其中UNIQUEID='@0';searchTerm=“”+请求.查询字符串[searchTerm];+“”“大多数示例都是针对SQL Server的。Oracle使用冒号而不是at符号进行参数化。你可能不需要单引号,所以也试试吧。诺克斯!你是我的英雄。将位置参数更改为:0允许查询通过。您能为我提供您所使用的文档的正确方向吗?我想在将来参考它。因为您已经指出一个不同点是oracle,并且我对参数化不起作用的不同数据库有不同的体验,所以我研究了参数和oracle的堆栈溢出。链接在我更新的答案的底部。
var searchQuery = "SELECT * FROM DATABASE.DATABASETABLE WHERE UNIQUEID = ':0'";