CoreLab.Oracle.OracleException was unhandled
Message="Network error: 204"
Source="CoreLab.UniDirect.Oracle"
ErrorCode=-2147467259
Code=204
Offset=0
StackTrace:
at CoreLab.Oracle.au.Close()
at CoreLab.Oracle.au.Finalize()
InnerException:
This happens when using a direct connection. When using oracle client (not direct) it works.
To test:
CREATE TABLE delme
(id NUMBER ,
bigfield BLOB)
/
-- Constraints for DELME
ALTER TABLE delme
ADD CONSTRAINT pk_delme PRIMARY KEY (id)
/
App Config
Code: Select all
And here the console program:
Code: Select all
using System;
using System.Configuration;
using System.Text;
using CoreLab.UniDirect;
namespace ConsoleTestUniLong
{
internal class Program
{
private static void Main(string[] args)
{
string connectString = ConfigurationManager.ConnectionStrings["UNIDB"].ConnectionString;
using (UniConnection conn = new UniConnection(connectString))
{
conn.Open();
UniTransaction trans = conn.BeginTransaction();
try
{
//Lest run the test cycle a few times
int maxCycle = 2;
for (int cycle = 1; cycle <= maxCycle; cycle++)
{
Console.WriteLine("**** Cycle {0}/{1}", cycle, maxCycle);
//Delete all the record
UniCommand cmdDelete = new UniCommand("DELETE FROM DELME", conn);
int recordsAffected = cmdDelete.ExecuteNonQuery();
Console.WriteLine("{0} returns {1}", cmdDelete.CommandText, recordsAffected);
Console.WriteLine("Inserting big fields...");
for (int i = 1; i <= 100; i++)
{
int maxLen = 1000*i;
string longText = new string('X', maxLen);
UniCommand cmd = new UniCommand("INSERT INTO DELME (ID,BIGFIELD) VALUES (:pID, :pBIGFIELD)", conn);
cmd.Parameters.Add("pID", i);
UniParameter param = new UniParameter("pBIGFIELD", UniDbType.Blob);
param.Value = CreateBlob(conn, longText);
cmd.Parameters.Add(param);
recordsAffected = cmd.ExecuteNonQuery();
Console.WriteLine("Inserting {0} characters returned {1}", maxLen, recordsAffected);
}
Console.WriteLine("Verifying big fields...");
for (int i = 1; i <= 100; i++)
{
int maxLen = 1000*i;
string longText = string.Empty;
UniCommand cmd = new UniCommand("SELECT ID,BIGFIELD FROM DELME WHERE ID = :pID", conn);
cmd.Parameters.Add("pID", i);
UniDataReader rdr = cmd.ExecuteReader();
if (rdr.Read())
longText = ReadBlob(rdr, 1);
if (longText.Length != maxLen)
throw new ApplicationException("Unexpected length");
Console.WriteLine("Verified length {0} characters", maxLen);
}
}
//Commit
trans.Commit();
}
catch
{
trans.Rollback();
throw;
}
finally
{
conn.Close();
}
}
Console.WriteLine("End. Press a key to terminate the program");
Console.ReadKey();
}
private static UniBlob CreateBlob(UniConnection uniConnection, string value)
{
UniBlob uniBlob = new UniBlob(uniConnection, UniDbType.Blob);
byte[] chars = Encoding.Default.GetBytes(value);
uniBlob.Write(chars, 0, chars.Length);
return uniBlob;
}
private static string ReadBlob(UniDataReader dataReader, int fieldNo)
{
int length = (int) dataReader.GetBytes(fieldNo, 0, null, 0, 0);
byte[] buffer = new Byte[length];
length = (int) dataReader.GetBytes(fieldNo, 0, buffer, 0, length);
return Encoding.Default.GetString(buffer);
}
}
}