参数化SQL、Oracle 11g和C#无法创建索引

本文关键字:创建 索引 11g SQL Oracle 参数 | 更新日期: 2023-09-27 18:27:35

我正在尝试使用参数化查询在Oracle服务器上创建索引。如果我使用字符串串联,我可以很好地创建索引,所以我认为这不是帐户或权限问题。我得到错误:

ORA-01036: illegal variable name/number

我在代码中找不到任何错误,但我确信我遗漏了一些东西。我使用的是Oracle.DataAccess.dll版本4.112.3.0。服务器报告的版本为"Oracle Database 11g Enterprise Edition Release 11.2.0.3.0-64bit Production"

我已经尝试删除了所有的参数,除了一个,但得到了相同的错误。1个或多个参数的任何组合都会导致错误。错误每次都会发生。我用手表来验证参数是否正确设置,并尝试在设置前清除参数。到目前为止,无论我做什么,我仍然会犯错误。这是代码:

using (OracleCommand mycom = new OracleCommand())
        {
            using (OracleConnection Connection = new OracleConnection(connectionString))
            {
                mycom.BindByName = true;
                mycom.CommandText = "CREATE INDEX :indexname on :tablename (:colname)";
                mycom.Parameters.Add("indexname", indexName);
                mycom.Parameters.Add("tablename", tableName);
                mycom.Parameters.Add("colname", colName);
                mycom.Connection = Connection;
                mycom.CommandType = CommandType.Text;
                mycom.Connection.Open();
                mycom.ExecuteNonQuery();
            }
        }

参数化SQL、Oracle 11g和C#无法创建索引

不能在DDL语句中使用绑定变量(如CREATE INDEX)。绑定变量仅在DML语句中使用。您需要在C#代码中构建DDL语句。

这是应用程序安装过程的一部分吗?否则,想要从应用程序创建索引将是极不寻常的。您的应用程序不应该在初始安装过程之外创建任何数据库对象。