繁体   English   中英

将方法转换为参数化查询?

[英]Convert method to parametrized query?

我想提出一种通用方法来为我的应用程序获取序列(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 

不是有效的令牌。 有效令牌的部分列表为。 该列表假定该语句在令牌之前是正确的。 该错误可能早于该语句,但是该语句的语法到目前为止一直有效。 恢复。 :执行以下一项或多项操作,然后重试该请求:-验证令牌区域中的SQL语句? 更正该语句。 错误可能是缺少逗号或引号,可能是拼写错误的单词,或者可能与子句的顺序有关。 -如果错误令牌为,请更正该SQL语句,因为它没有以有效的子句结尾。

您不能在查询中使用参数指定表名,而只能使用参数指定实际值。

您需要在查询中更改表名,这表明您应该在表名中包含数据,而实际上该数据应该在表中。 您可能会考虑重新设计数据库,以便将这些数据保存在单个表中,而不是使用结构相同的多个表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM