Неверный символ Oracle и длинные строки - PullRequest
0 голосов
/ 03 марта 2010

Я новичок в мире 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)
)

"INSERT INTO layer_mapping VALUES (: 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 (недопустимый символ).

Есть мысли?

Ответы [ 2 ]

4 голосов
/ 03 марта 2010

Разобрался:

Мой построитель команд sql добавляет ';' в конце команды, но, похоже, класс OracleCommand тоже это делает.

решаемая.

0 голосов
/ 03 марта 2010

Я бы сказал, что первое, что вы должны сделать, это использовать CLOB в таблице, предполагая, что вы на 9i или выше, а не на LONG RAW. LONGs / LONG RAW давно устарели - единственная причина, по которой Oracle до сих пор держит их, заключается в том, что они существуют в словаре данных, и Oracle обещала никогда его не менять.

...