You have a blank NCLOB field in your Oracle database, but any time you try to save more than 32Kb of data to it, you get an error about an invalid conversion. The solution is a bit hackish, but here goes:
using (OracleConnection conn =A quick walkthrough of the code...
new OracleConnection(connectionString))
{
conn.Open();
OracleTransaction tx = conn.BeginTransaction();
OracleCommand cmdLob = new OracleCommand(
String.Format("SELECT NCLOB_FIELD FROM MYTABLE WHERE " +
"PK = {0} FOR UPDATE", pk), conn, tx);
cmdLob.CommandType = CommandType.Text;
using (OracleDataReader dr = cmdLob.ExecuteReader())
{
while (dr.Read())
{
OracleLob lob = dr.GetOracleLob(0);
lob.Seek(0, System.IO.SeekOrigin.Begin);
lob.Write(System.Text.Encoding.Unicode.GetBytes(textToSave), 0,
textToSave.Length * 2);
}
}
tx.Commit();
conn.Close();
}
Open your connection to the Oracle database.
Start a transaction on that connection.
Get an
OracleDataReader
that points to the NCLOB field. Make sure that you suffix your query with FOR UPDATE, or you won't be able to update your CLOB.Get the LOB object from the
OracleDataReader
.At that point, the Lob object is essentially a stream, but to write your string, you need to write it in a format that Oracle won't complain about, hence getting the Unicode-encoded bytestream for the text.
Commit the transaction.
Close the connection.
1 comment:
You're still developing new code using Oracle? Crap I thought I had you guys moving towards MS.
Post a Comment