我想制作一个通用的方法来获取我的应用程序的序列(OLEDB asp.net DB2)
var seqName="Table1";
string query="SELECT NEXTVAL FOR SchemaName."+seqName+" as seqid FROM sysibm.sysdummy1";
using (OleDbCommand myCommand=new OleDbCommand(query,myConnection))
{
myConnection.Open();
result = Convert.ToInt32(myCommand.ExecuteScalar());
}
使用此功能将无效
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
不是有效的令牌。部分清单 有效的代币是。这个 list假定该语句是 纠正令牌。错误 可能在声明的早些时候,但是 该语句的语法出现 到目前为止是有效的。恢复。 。 。 :做一个或多个 关注并再次尝试请求: - 验证令牌区域中的SQL语句?纠正 声明。错误可能是一个 它缺少逗号或引号 可能是一个拼写错误的单词,或者它 可能与...的顺序有关 条款。 - 如果错误令牌是 ,更正SQL 声明,因为它没有结束 一个有效的条款。
答案 0 :(得分:1)
您不能使用参数在查询中指定表名,只能使用参数来指定实际值。
您需要更改查询中的表名,这表明您在表名中有数据,而数据实际上应该在表中。您可以考虑重新设计数据库,以便将这些数据放在一个表中,而不是让几个表具有相同的结构。