После большого поиска и работать и пробовать, я придумал следующее решение:
Вы не можете использовать ExecuteStoreCommand() метод для того, чтобы вставить строку, которая длиннее, чем 4К.
Чтобы добавить строку более 4K, вам необходимо привязать параметры.
Чтобы связать параметры в .net, мы будем использовать odp.net.
Шаг первый
Добавить ссылку на ваш проект.
- Щелкните правой кнопкой мыши на окне проводника проекта .net и нажмите ссылку.
- На вкладке .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.
Надеюсь, что это поможет другим ...