| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- // testblob.cs - tests loading a binary file into an oracle blob and vice-versa
- using System;
- using System.Data;
- using System.Data.OracleClient;
- using System.Text;
- using System.IO;
- class TestBlob
- {
- static string infilename = @"../../../tools/mono-win32-setup-dark.bmp";
- static string outfilename = @"mono-win32-setup-dark2.bmp";
- static string connectionString = "Data Source=testdb;User ID=scott;Password=tiger";
- static byte[] bytes1 = null;
- public static void Main (string[] args)
- {
- OracleConnection con = new OracleConnection();
- con.ConnectionString = connectionString;
- con.Open();
- BLOBTest (con);
- ReadBlob (con);
-
- con.Close();
- con = null;
- }
- // read the BLOB into file "cs-parser2.cs"
- public static void ReadBlob (OracleConnection connection)
- {
- if (File.Exists(outfilename) == true) {
- Console.WriteLine("Filename already exists: " + outfilename);
- return;
- }
- OracleCommand rcmd = connection.CreateCommand ();
- rcmd.CommandText = "SELECT BLOB_COLUMN FROM BLOBTEST";
- OracleDataReader reader2 = rcmd.ExecuteReader ();
- if (!reader2.Read ())
- Console.WriteLine ("ERROR: RECORD NOT FOUND");
- Console.WriteLine (" TESTING OracleLob OBJECT 2...");
- OracleLob lob2 = reader2.GetOracleLob (0);
- Console.WriteLine (" LENGTH: {0}", lob2.Length);
- Console.WriteLine (" CHUNK SIZE: {0}", lob2.ChunkSize);
- byte[] lobvalue = (byte[]) lob2.Value;
-
- if (ByteArrayCompare(bytes1, lobvalue) == true)
- Console.WriteLine("bytes1 and bytes2 are equal: good");
- else
- Console.WriteLine("bytes1 and bytes2 are not equal: bad");
- FileStream fs = new FileStream(outfilename, FileMode.CreateNew);
- BinaryWriter w = new BinaryWriter(fs);
- w.Write(lobvalue);
- w.Close();
- fs.Close();
- lob2.Close ();
- reader2.Close ();
- }
- public static void BLOBTest (OracleConnection connection)
- {
- Console.WriteLine (" BEGIN TRANSACTION ...");
- OracleTransaction transaction = connection.BeginTransaction ();
- Console.WriteLine (" Drop table BLOBTEST ...");
- try {
- OracleCommand cmd2 = connection.CreateCommand ();
- cmd2.Transaction = transaction;
- cmd2.CommandText = "DROP TABLE BLOBTEST";
- cmd2.ExecuteNonQuery ();
- }
- catch (OracleException) {
- // ignore if table already exists
- }
- Console.WriteLine (" CREATE TABLE ...");
- OracleCommand create = connection.CreateCommand ();
- create.Transaction = transaction;
- create.CommandText = "CREATE TABLE BLOBTEST (BLOB_COLUMN BLOB)";
- create.ExecuteNonQuery ();
- Console.WriteLine (" INSERT RECORD ...");
- OracleCommand insert = connection.CreateCommand ();
- insert.Transaction = transaction;
- insert.CommandText = "INSERT INTO BLOBTEST VALUES (EMPTY_BLOB())";
- insert.ExecuteNonQuery ();
- OracleCommand select = connection.CreateCommand ();
- select.Transaction = transaction;
- select.CommandText = "SELECT BLOB_COLUMN FROM BLOBTEST FOR UPDATE";
- Console.WriteLine (" SELECTING A BLOB (Binary Large Object) VALUE FROM BLOBTEST");
- OracleDataReader reader = select.ExecuteReader ();
- if (!reader.Read ())
- Console.WriteLine ("ERROR: RECORD NOT FOUND");
- Console.WriteLine (" TESTING OracleLob OBJECT ...");
- OracleLob lob = reader.GetOracleLob (0);
- Console.WriteLine (" LENGTH: {0}", lob.Length);
- Console.WriteLine (" CHUNK SIZE: {0}", lob.ChunkSize);
- //try {
- if (File.Exists(infilename) == false) {
- Console.WriteLine("Filename does not exist: " + infilename);
- return;
- }
- FileStream fs = new FileStream(infilename, FileMode.Open, FileAccess.Read);
- BinaryReader r = new BinaryReader(fs);
-
- byte[] bytes = null;
- int bufferLen = 8192;
- bytes = r.ReadBytes (bufferLen);
- while(bytes.Length > 0) {
- Console.WriteLine("byte count: " + bytes.Length.ToString());
- lob.Write (bytes, 0, bytes.Length);
- bytes1 = ByteArrayCombine (bytes1, bytes);
- if (bytes.Length < bufferLen)
- break;
- bytes = r.ReadBytes (bufferLen);
- }
- r.Close();
- fs.Close ();
- //}
- //catch (Exception e) {
- // Console.WriteLine("The file could not be read:");
- // Console.WriteLine(e.Message);
- //}
- lob.Close ();
- Console.WriteLine (" CLOSING READER...");
-
- reader.Close ();
- transaction.Commit ();
- transaction = null;
- lob = null;
- reader.Dispose();
- reader = null;
- create = null;
- insert = null;
- select = null;
- }
- static byte[] ByteArrayCombine (byte[] b1, byte[] b2)
- {
- if (b1 == null)
- b1 = new byte[0];
- if (b2 == null)
- b2 = new byte[0];
-
- byte[] bytes = new byte[b1.Length + b2.Length];
- int i = 0;
- for (int j = 0; j < b1.Length; j++) {
- bytes[i] = b1[j];
- i++;
- }
- for (int k = 0; k < b2.Length; k++) {
- bytes[i] = b2[k];
- i++;
- }
- return bytes;
- }
- static bool ByteArrayCompare(byte[] ba1, byte[] ba2)
- {
- if (ba1 == null && ba2 == null)
- return true;
- if (ba1 == null)
- return false;
- if (ba2 == null)
- return false;
- if (ba1.Length != ba2.Length)
- return false;
- for (int i = 0; i < ba1.Length; i++)
- {
- Console.WriteLine("i: " + i.ToString() + " ba1: " + ba1[i].ToString() + " ba2: " + ba2[i].ToString());
- }
- for (int i = 0; i < ba1.Length; i++)
- {
- if (ba1[i] != ba2[i])
- return false;
- }
- return true;
- }
- }
|