System.Data.OracleClient-将大字符串写入Clob列

时间:2019-07-01 11:50:37

标签: c# oracle11g clob

我正在尝试将大字符串(超过4.000个字符)插入Oracle Clob列,但是我一直收到错误“ 内部.Net Framework数据提供程序错误30 ”。我已经尝试了多种方法,但是当String长度超过4.000个字符时,一切都会失败。我的最后一次尝试是通过底部of this site的示例进行的:。

这是我的代码,我将数据类型 Blob 更改为 Clob (它对Blob也无效):

 try
 {
   using (var conn = new OracleConnection(_conn))
   {
      conn.Open();
      OracleTransaction transaction = conn.BeginTransaction();

      using (OracleCommand cmd = new OracleCommand(SQL, conn))
      {
          cmd.Transaction = transaction;
          cmd.CommandText = "declare xx clob; begin dbms_lob.createtemporary(xx, false, 0); :tempblob := xx; end;";
          cmd.Parameters.Add(new OracleParameter("tempblob", OracleType.Clob)).Direction = ParameterDirection.Output;
          cmd.ExecuteNonQuery();

          OracleLob tempLob = (OracleLob)cmd.Parameters[0].Value;
          byte[] bytes = System.Text.Encoding.Unicode.GetBytes(Large_string);
          tempLob.BeginBatch(OracleLobOpenMode.ReadWrite);
          tempLob.Write(bytes, 0, bytes.Length);
          tempLob.EndBatch();

          cmd.Parameters.Clear();
          cmd.CommandType = CommandType.StoredProcedure;

          cmd.Parameters.Add(new OracleParameter("NAME_IN", OracleType.VarChar)).Value = String_1;
          cmd.Parameters.Add(new OracleParameter("REASON_IN", OracleType.VarChar)).Value = String_2;
          cmd.Parameters.Add(new OracleParameter("ID", OracleType.Clob)).Value =tempLob; 
          cmd.ExecuteNonQuery();
      }
      transaction.Commit();
    }
  }
  catch (Exception ex)
  {
     MessageBox.Show(ex.Message);
  }

我在这里想念什么?

P.S。 :如问题标题所述,我需要 System.Data.OracleClient 的解决方案。不幸的是,我无法使用 DataAccess.dll (这可能解决了问题)。任何帮助,谢谢。

0 个答案:

没有答案