0

私は Oracle の世界では初めてで、パラメーター化されたクエリを使用して .NET (C#) から挿入しようとしています。

私のテーブルは次のとおりです。

CREATE TABLE layer_mapping
(
    lm_id NUMBER NOT NULL,
    lm_layer_name VARCHAR2(50) NOT NULL,
    lm_layer_file LONG RAW NOT NULL,
    CONSTRAINT lm_pk PRIMARY KEY(lm_id)
)

"layer_mapping 値に挿入 (:lm_id,:lm_layer_name,:lm_layer_file);"

Visual Studio では、上記のクエリが実行時に生成されており、BindByName = true; があります。

エラーが疑われる「lm_layer_file」値は、ファイルからクラスに供給されており、バイト配列です。以下はクラスの例です。

public class LayerMapping()
{
    private Int32 _id;
    private String _name;
    private Byte[] _file;
}

奇妙なことに、PostgreSQL ではすべてがエラーなしで正常に行われます。

長い生の値を生成するために間違った方法を使用していますか?

ああ、私が受け取っているエラーは ORA-0991 (無効な文字) です。

何かご意見は?

4

2 に答える 2

4

理解した:

私のsqlコマンドビルダーは';'を追加します コマンドの最後にありますが、OracleCommandクラスもそれを行っているようです。

解決しました。

于 2010-03-03T14:40:52.080 に答える
0

最初にすべきことは、LONG RAWではなく、9i以上を使用していると仮定して、テーブルでCLOBを使用することです。LONG / LONG RAWは長い間廃止されてきました。オラクルがそれらを維持している唯一の理由は、それらがデータディクショナリに存在し、Oracleが決して変更しないことを約束したためです。

于 2010-03-03T14:30:43.197 に答える