C# 是否将方法转换为参数化查询?
我想为我的应用程序(OLEDB asp.net DB2)创建一个获取序列的通用方法 用这个来代替是行不通的C# 是否将方法转换为参数化查询?,c#,asp.net,oledb,C#,Asp.net,Oledb,我想为我的应用程序(OLEDB asp.net DB2)创建一个获取序列的通用方法 用这个来代替是行不通的 var seqName="mySeq1"; string query="SELECT NEXTVAL FOR SchemaName.? as seqid FROM sysibm.sysdummy1"; using (OleDbCommand myCommand=new OleDbCommand(query,myConnection))
var seqName="mySeq1";
string query="SELECT NEXTVAL FOR SchemaName.? as seqid FROM sysibm.sysdummy1";
using (OleDbCommand myCommand=new OleDbCommand(query,myConnection))
{
myCommand.Parameters.Add(new OleDbParameter("TabName",seqName));
myConnection.Open();
result = Convert.ToInt32(myCommand.ExecuteScalar());
}
它抛出
SQL0104:令牌?无效。有效令牌:。
原因……:在令牌?处检测到语法错误?。代币是
不是有效的令牌。部分名单
有效代币为。这
列表假定该语句是
更正到令牌。错误
可能在声明的前面,但是
该语句的语法似乎是
在这一点上是有效的。恢复。
. . : 执行以下一项或多项操作:
请执行以下操作,然后重试该请求:
--验证令牌?区域中的SQL语句?。纠正错误
陈述这个错误可能是一个错误
缺少逗号或引号,请将其删除
可能是拼错的单词,或者
可能与
条款。-如果错误标记为
,请更正SQL
语句,因为它不以
有效的条款
不能使用参数在查询中指定表名,只能使用参数指定实际值
您需要在查询中更改表名,这表明您在表名中有数据,而数据实际上应该在表中。您可能会考虑重新设计数据库,以便在一个表中拥有这些数据,而不是具有相同结构的多个表。您好,对于键入,我正在获取序列而不是表。更正了我的帖子。@Popo:任何标识符都一样;你不能用参数来指定标识符,只能指定值。谢谢你,Guffa,我想你对标识符和值的理解很到位。我改变了选择序列的方法。
var seqName="mySeq1";
string query="SELECT NEXTVAL FOR SchemaName.? as seqid FROM sysibm.sysdummy1";
using (OleDbCommand myCommand=new OleDbCommand(query,myConnection))
{
myCommand.Parameters.Add(new OleDbParameter("TabName",seqName));
myConnection.Open();
result = Convert.ToInt32(myCommand.ExecuteScalar());
}
SQL0104: Token ? was not valid. Valid tokens: <IDENTIFIER>.
Cause . . . . . : A syntax error was detected at token ?. Token ? is