2014-12-10 3 views
0

У меня есть таблица, каквставить в Oracle XmlType колонку с ExecuteStoreCommand()

Id (int) | xml (xmltype) 

Я хочу, чтобы вставить в эту таблицу как:

string Sql = "insert into MyTable (xml) values (xmltype(:0))"; 
myxml = "<root>very long xml...</root>"; 
MyEntity.ExecuteStoreCommand(Sql, myxml); 

Если XML-очень долго (более 4000 символы) это возвращает следующее сообщение об ошибке:

ORA-01461: can bind a LONG value only for insert into a LONG column

Я искал в Интернете, и обнаружил, что «myxml» должно быть «CLOB» бу t entity framework отправляет его как «длинный».

Как мы можем решить эту проблему?

ответ

0

После большого поиска и работать и пробовать, я придумал следующее решение:

Вы не можете использовать ExecuteStoreCommand() метод для того, чтобы вставить строку, которая длиннее, чем 4К.

Чтобы добавить строку более 4K, вам необходимо привязать параметры.

Чтобы связать параметры в .net, мы будем использовать odp.net.

Шаг первый

Добавить ссылку на ваш проект.

  1. Щелкните правой кнопкой мыши на окне проводника проекта .net и нажмите ссылку.
  2. На вкладке .net найдите Oracle.DataAccess и добавьте это в проект.

Шаг второй

Добавьте это в верхней части страницы:

using Oracle.DataAccess.Client; 

Шаг Три

Теперь код:

using (OracleConnection con = new OracleConnection("Here comes your oracle connection string.")) 
{ 
    con.Open(); 

    //prepare the command 
    OracleCommand cmd = con.CreateCommand(); 
    cmd.CommandType = CommandType.Text; 
    cmd.CommandText = @"INSERT INTO MyTable VALUES (:param0) "; 

    //define the parameter. 
    OracleParameter param0 = new OracleParameter(); 
    param0.OracleDbType = OracleDbType.Clob; 
    param0.Value = "very long xml..."; 
    param0.ParameterName = "param0"; 
    cmd.Parameters.Add(param0); 

    try 
    { 
     AffectedRows = cmd.ExecuteNonQuery(); //execute the query 
    } 
    catch (Exception e) 
    { 
     return 0; 
    } 
} 

Теперь он должен работать как шарм :)

Примечания

1- Не используйте System.Data.OracleClient, она устарела.

2- Если тип данных столбца таблицы является xmltype и по-прежнему появляется ошибка, измените тип данных на clob.

Надеюсь, что это поможет другим ...

Смежные вопросы