views:

63

answers:

0

Hi everyone,

I want to create a temporary clob. That's my function:

public static OracleLob CreateTemporaryClob(OracleConnection conn, OracleTransaction tx, string data)
{
    OracleLob tempClob = null;
    byte[] bData = new System.Text.ASCIIEncoding().GetBytes(data);

    string cmdText = "declare a clob; begin dbms_lob.createtemporary(a, false); :tempclob := a; end;";    

    OracleCommand cmd = new OracleCommand(cmdText, conn);
    cmd.Transaction = tx;

    OracleParameter p = cmd.Parameters.Add("tempclob", OracleType.Clob);
    p.Direction = ParameterDirection.Output;

    cmd.ExecuteNonQuery();

    tempClob = (OracleLob)p.Value;

    tempClob.BeginBatch(OracleLobOpenMode.ReadWrite);
    tempClob.Write(bData, 0, bData.Length);  // <= ERROR
    tempClob.EndBatch();

    return tempClob;
}

And everthing seems to work fine with short input strings. But if I pass string which are bigger than about 4k I always get this error in the marked line:

CLOB and NCLOB require even number of bytes for this argument. Parameter name: count

The size of the variables are: bData = byte[6820]; bData.Length = 6820;

Thx 4 answers.