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

时间:2010-08-26 08:10:00

标签: c# asp.net oledb

我想制作一个通用的方法来获取我的应用程序的序列(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   声明,因为它没有结束   一个有效的条款。

1 个答案:

答案 0 :(得分:1)

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

您需要更改查询中的表名,这表明您在表名中有数据,而数据实际上应该在表中。您可以考虑重新设计数据库,以便将这些数据放在一个表中,而不是让几个表具有相同的结构。