0

パラメータ化されたクエリを使用して、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つを除いてすべてのパラメータを削除しようとしましたが、同じエラーが発生しました。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();

            }
        }
4

1 に答える 1

0

DDL ステートメント ( など) でバインド変数を使用することはできませんCREATE INDEX。バインド変数は、DML ステートメントでのみ使用されます。C# コードで DDL ステートメントを作成する必要があります。

これはアプリケーションのインストール プロセスの一部ですか? そうしないと、アプリケーションからインデックスを作成することは非常にまれです。アプリケーションは、最初のインストール プロセス以外でデータベース オブジェクトを作成するべきではありません。

于 2013-08-14T15:49:40.157 に答える