2 // TestOracleClient.cs - Tests Sytem.Data.OracleClient
3 // data provider in Mono.
5 // Part of managed C#/.NET library System.Data.OracleClient.dll
7 // Part of the Mono class libraries at
8 // mcs/class/System.Data.OracleClient/System.Data.OracleClient.OCI
11 // Assembly: System.Data.OracleClient.dll
12 // Namespace: System.Data.OracleClient
15 // mcs TestOracleClient.cs /r:System.Data.dll /r:System.Data.OracleClient.dll /nowarn:0168
18 // Daniel Morgan <monodanmorg@yahoo.com>
20 // Copyright (C) Daniel Morgan, 2002, 2004-2005, 2008
25 using System.Runtime.InteropServices;
27 using System.Data.OracleClient;
29 using System.Threading;
31 namespace Test.OracleClient
33 public class OracleTest
35 private static Thread t = null;
\r
36 private static string conStr;
\r
37 public static readonly int MAX_CONNECTIONS = 30; // max connections default to 100, but I will set to 30.
\r
44 static void MonoTest(OracleConnection con)
46 Console.WriteLine (" Drop table MONO_ORACLE_TEST ...");
48 OracleCommand cmd2 = con.CreateCommand ();
49 cmd2.CommandText = "DROP TABLE MONO_ORACLE_TEST";
50 cmd2.ExecuteNonQuery ();
52 catch (OracleException) {
53 // ignore if table already exists
56 OracleCommand cmd = null;
58 Console.WriteLine(" Creating table MONO_ORACLE_TEST...");
59 cmd = new OracleCommand();
61 cmd.CommandText = "CREATE TABLE MONO_ORACLE_TEST ( " +
62 " varchar2_value VarChar2(32), " +
63 " long_value long, " +
64 " number_whole_value Number(18), " +
65 " number_scaled_value Number(18,2), " +
66 " number_integer_value Integer, " +
67 " float_value Float, " +
68 " date_value Date, " +
69 " char_value Char(32), " +
70 " clob_value Clob, " +
71 " blob_value Blob, " +
72 " clob_empty_value Clob, " +
73 " blob_empty_value Blob, " +
74 " varchar2_null_value VarChar2(32), " +
75 " number_whole_null_value Number(18), " +
76 " number_scaled_null_value Number(18,2), " +
77 " number_integer_null_value Integer, " +
78 " float_null_value Float, " +
79 " date_null_value Date, " +
80 " char_null_value Char(32), " +
81 " clob_null_value Clob, " +
82 " blob_null_value Blob " +
85 cmd.ExecuteNonQuery();
87 Console.WriteLine(" Begin Trans for table MONO_ORACLE_TEST...");
88 OracleTransaction trans = con.BeginTransaction ();
90 Console.WriteLine(" Inserting value into MONO_ORACLE_TEST...");
91 cmd = new OracleCommand();
93 cmd.Transaction = trans;
94 cmd.CommandText = "INSERT INTO mono_oracle_test " +
95 " ( varchar2_value, " +
97 " number_whole_value, " +
98 " number_scaled_value, " +
99 " number_integer_value, " +
105 " clob_empty_value, " +
106 " blob_empty_value " +
110 " 'This is a LONG column', " +
115 " TO_DATE( '2004-12-31', 'YYYY-MM-DD' ), " +
123 cmd.ExecuteNonQuery();
125 Console.WriteLine(" Select/Update CLOB columns on table MONO_ORACLE_TEST...");
127 // update BLOB and CLOB columns
128 OracleCommand select = con.CreateCommand ();
129 select.Transaction = trans;
130 select.CommandText = "SELECT CLOB_VALUE, BLOB_VALUE FROM MONO_ORACLE_TEST FOR UPDATE";
131 OracleDataReader reader = select.ExecuteReader ();
133 Console.WriteLine ("ERROR: RECORD NOT FOUND");
135 Console.WriteLine(" Update CLOB column on table MONO_ORACLE_TEST...");
136 OracleLob clob = reader.GetOracleLob (0);
138 UnicodeEncoding encoding = new UnicodeEncoding ();
139 bytes = encoding.GetBytes ("Mono is fun!");
140 clob.Write (bytes, 0, bytes.Length);
143 Console.WriteLine(" Update BLOB column on table MONO_ORACLE_TEST...");
144 OracleLob blob = reader.GetOracleLob (1);
145 bytes = new byte[6] { 0x31, 0x32, 0x33, 0x34, 0x35, 0x036 };
146 blob.Write (bytes, 0, bytes.Length);
149 Console.WriteLine(" Commit trans for table MONO_ORACLE_TEST...");
152 // OracleCommand.ExecuteReader of MONO_ORACLE_TEST table
153 Console.WriteLine(" Read simple test for table MONO_ORACLE_TEST...");
154 ReadSimpleTest(con, "SELECT * FROM MONO_ORACLE_TEST");
156 // OracleCommand.ExecuteScalar
157 Console.WriteLine(" -ExecuteScalar tests...");
158 string varchar2_value = (string) ReadScalar (con,"SELECT MAX(varchar2_value) FROM MONO_ORACLE_TEST");
159 Console.WriteLine(" String Value: " + varchar2_value);
161 Console.WriteLine(" Read Scalar: number_whole_value");
162 decimal number_whole_value = (decimal)
163 ReadScalar (con,"SELECT MAX(number_whole_value) FROM MONO_ORACLE_TEST");
164 Console.WriteLine(" Int32 Value: " + number_whole_value.ToString());
166 Console.WriteLine(" Read Scalar: number_scaled_value");
167 decimal number_scaled_value = (decimal)
168 ReadScalar (con,"SELECT number_scaled_value FROM MONO_ORACLE_TEST");
169 Console.WriteLine(" Decimal Value: " + number_scaled_value.ToString());
171 Console.WriteLine(" Read Scalar: date_value");
172 DateTime date_value = (DateTime)
173 ReadScalar (con,"SELECT date_value FROM MONO_ORACLE_TEST");
174 Console.WriteLine(" DateTime Value: " + date_value.ToString());
176 Console.WriteLine(" Read Scalar: clob_value");
177 string clob_value = (string)
178 ReadScalar (con,"SELECT clob_value FROM MONO_ORACLE_TEST");
179 Console.WriteLine(" CLOB Value: " + clob_value);
181 Console.WriteLine(" Read Scalar: blob_value");
182 byte[] blob_value = (byte[])
183 ReadScalar (con,"SELECT blob_value FROM MONO_ORACLE_TEST");
184 string sblob_value = GetHexString (blob_value);
185 Console.WriteLine(" BLOB Value: " + sblob_value);
187 // OracleCommand.ExecuteOracleScalar
188 Console.WriteLine(" -ExecuteOracleScalar tests...");
189 Console.WriteLine(" Read Oracle Scalar: varchar2_value");
190 ReadOracleScalar (con,"SELECT MAX(varchar2_value) FROM MONO_ORACLE_TEST");
192 Console.WriteLine(" Read Oracle Scalar: number_whole_value");
193 ReadOracleScalar (con,"SELECT MAX(number_whole_value) FROM MONO_ORACLE_TEST");
195 Console.WriteLine(" Read Oracle Scalar: number_scaled_value");
196 ReadOracleScalar (con,"SELECT number_scaled_value FROM MONO_ORACLE_TEST");
198 Console.WriteLine(" Read Oracle Scalar: date_value");
199 ReadOracleScalar (con,"SELECT date_value FROM MONO_ORACLE_TEST");
201 Console.WriteLine(" Read Oracle Scalar: clob_value");
202 ReadOracleScalar (con,"SELECT clob_value FROM MONO_ORACLE_TEST");
204 Console.WriteLine(" Read Oracle Scalar: blob_value");
205 ReadOracleScalar (con,"SELECT blob_value FROM MONO_ORACLE_TEST");
208 static object ReadScalar (OracleConnection con, string selectSql)
210 OracleCommand cmd = null;
211 cmd = con.CreateCommand();
212 cmd.CommandText = selectSql;
214 object o = cmd.ExecuteScalar ();
216 string dataType = o.GetType ().ToString ();
217 Console.WriteLine (" DataType: " + dataType);
221 static void ReadOracleScalar (OracleConnection con, string selectSql)
223 OracleCommand cmd = null;
224 cmd = con.CreateCommand();
225 cmd.CommandText = selectSql;
227 object o = cmd.ExecuteOracleScalar ();
229 string dataType = o.GetType ().ToString ();
230 Console.WriteLine (" DataType: " + dataType);
231 if (dataType.Equals("System.Data.OracleClient.OracleLob"))
232 o = ((OracleLob) o).Value;
233 if (o.GetType ().ToString ().Equals ("System.Byte[]"))
234 o = GetHexString ((byte[])o);
236 Console.WriteLine (" Value: " + o.ToString ());
239 static void ReadSimpleTest(OracleConnection con, string selectSql)
241 OracleCommand cmd = null;
242 OracleDataReader reader = null;
244 cmd = con.CreateCommand();
245 cmd.CommandText = selectSql;
246 reader = cmd.ExecuteReader();
248 Console.WriteLine(" Results...");
249 Console.WriteLine(" Schema");
251 table = reader.GetSchemaTable();
252 for(int c = 0; c < reader.FieldCount; c++) {
253 Console.WriteLine(" Column " + c.ToString());
254 DataRow row = table.Rows[c];
256 string strColumnName = row["ColumnName"].ToString();
257 string strBaseColumnName = row["BaseColumnName"].ToString();
258 string strColumnSize = row["ColumnSize"].ToString();
259 string strNumericScale = row["NumericScale"].ToString();
260 string strNumericPrecision = row["NumericPrecision"].ToString();
261 string strDataType = row["DataType"].ToString();
263 Console.WriteLine(" ColumnName: " + strColumnName);
264 Console.WriteLine(" BaseColumnName: " + strBaseColumnName);
265 Console.WriteLine(" ColumnSize: " + strColumnSize);
266 Console.WriteLine(" NumericScale: " + strNumericScale);
267 Console.WriteLine(" NumericPrecision: " + strNumericPrecision);
268 Console.WriteLine(" DataType: " + strDataType);
272 Console.WriteLine (" Data");
273 while (reader.Read ()) {
275 Console.WriteLine (" Row: " + r.ToString ());
276 for (int f = 0; f < reader.FieldCount; f++) {
280 string sDataType = "";
281 string sFieldType = "";
282 string sDataTypeName = "";
283 string sOraDataType = "";
285 sname = reader.GetName (f);
287 if (reader.IsDBNull (f)) {
288 ovalue = DBNull.Value;
290 sDataType = "DBNull.Value";
291 sOraDataType = "DBNull.Value";
294 //ovalue = reader.GetValue (f);
295 ovalue = reader.GetOracleValue (f);
296 object oravalue = null;
298 sDataType = ovalue.GetType ().ToString ();
300 case "System.Data.OracleClient.OracleString":
301 oravalue = ((OracleString) ovalue).Value;
303 case "System.Data.OracleClient.OracleNumber":
304 oravalue = ((OracleNumber) ovalue).Value;
306 case "System.Data.OracleClient.OracleLob":
307 OracleLob lob = (OracleLob) ovalue;
308 oravalue = lob.Value;
311 case "System.Data.OracleClient.OracleDateTime":
312 oravalue = ((OracleDateTime) ovalue).Value;
314 case "System.Byte[]":
315 oravalue = GetHexString((byte[])ovalue);
317 case "System.Decimal":
318 //Console.WriteLine(" *** Get Decimal, Int16, Int32, Int64, Float, Double, ...");
319 decimal dec = reader.GetDecimal (f);
320 //Console.WriteLine(" GetDecimal: " + dec.ToString ());
322 oravalue = (object) dec;
326 } catch (NotSupportedException e) {
327 Console.WriteLine (" ** Expected exception caught for GetInt16: NotSupportedException: " + e.Message);
331 long lng = reader.GetInt64 (f);
332 Console.WriteLine(" GetInt64: " + lng.ToString ());
333 int n = reader.GetInt32 (f);
334 Console.WriteLine(" GetInt32: " + n.ToString ());
335 float flt = reader.GetFloat (f);
336 Console.WriteLine(" GetFloat: " + flt.ToString ());
337 double dbl = reader.GetDouble (f);
338 Console.WriteLine(" GetDouble: " + dbl.ToString ());
339 } catch (OverflowException oe1) {
340 Console.WriteLine (" ** Overflow exception for numbers to big or too small: " + oe1.Message);
345 oravalue = ovalue.ToString ();
350 sOraDataType = oravalue.GetType ().ToString ();
351 if (sOraDataType.Equals ("System.Byte[]"))
352 svalue = GetHexString ((byte[]) oravalue);
354 svalue = oravalue.ToString();
357 sFieldType = reader.GetFieldType(f).ToString();
358 sDataTypeName = reader.GetDataTypeName(f);
360 Console.WriteLine(" Field: " + f.ToString());
361 Console.WriteLine(" Name: " + sname);
362 Console.WriteLine(" Value: " + svalue);
363 Console.WriteLine(" Oracle Data Type: " + sOraDataType);
364 Console.WriteLine(" Data Type: " + sDataType);
365 Console.WriteLine(" Field Type: " + sFieldType);
366 Console.WriteLine(" Data Type Name: " + sDataTypeName);
370 Console.WriteLine(" No data returned.");
373 static void DataAdapterTest (OracleConnection connection)
375 Console.WriteLine(" Create select command...");
376 OracleCommand command = connection.CreateCommand ();
377 command.CommandText = "SELECT * FROM SCOTT.EMP";
379 Console.WriteLine(" Create data adapter...");
380 OracleDataAdapter adapter = new OracleDataAdapter (command);
382 Console.WriteLine(" Create DataSet...");
383 DataSet dataSet = new DataSet ("EMP");
385 Console.WriteLine(" Fill DataSet via data adapter...");
386 adapter.Fill (dataSet);
388 Console.WriteLine(" Get DataTable...");
389 DataTable table = dataSet.Tables [0];
391 Console.WriteLine(" Display each row...");
393 foreach (DataRow row in table.Rows) {
394 Console.WriteLine (" row {0}", rowCount + 1);
395 for (int i = 0; i < table.Columns.Count; i += 1) {
396 Console.WriteLine (" {0}: {1}", table.Columns [i].ColumnName, row [i]);
398 Console.WriteLine ();
403 public static void DataAdapterTest2 (OracleConnection con)
\r
405 DataAdapterTest2_Setup (con);
\r
406 ReadSimpleTest (con, "SELECT * FROM mono_adapter_test");
\r
408 GetMetaData (con, "SELECT * FROM mono_adapter_test");
\r
410 DataAdapterTest2_Insert (con);
\r
411 ReadSimpleTest (con, "SELECT * FROM mono_adapter_test");
\r
413 DataAdapterTest2_Update (con);
\r
414 ReadSimpleTest (con, "SELECT * FROM mono_adapter_test");
\r
416 DataAdapterTest2_Delete (con);
\r
417 ReadSimpleTest (con, "SELECT * FROM mono_adapter_test");
\r
420 public static void GetMetaData (OracleConnection con, string sql)
\r
422 OracleCommand cmd = null;
423 OracleDataReader rdr = null;
425 cmd = con.CreateCommand();
426 cmd.CommandText = sql;
428 Console.WriteLine("Read Schema With KeyInfo");
429 rdr = cmd.ExecuteReader(CommandBehavior.KeyInfo | CommandBehavior.SchemaOnly);
432 dt = rdr.GetSchemaTable();
\r
433 foreach (DataRow schemaRow in dt.Rows) {
\r
434 foreach (DataColumn schemaCol in dt.Columns) {
\r
435 Console.WriteLine(schemaCol.ColumnName +
\r
437 schemaRow[schemaCol]);
\r
438 Console.WriteLine("---Type: " + schemaRow[schemaCol].GetType ().ToString());
\r
440 Console.WriteLine("");
\r
443 Console.WriteLine("Read Schema with No KeyInfo");
\r
445 rdr = cmd.ExecuteReader();
447 dt = rdr.GetSchemaTable();
\r
448 foreach (DataRow schemaRow in dt.Rows) {
\r
449 foreach (DataColumn schemaCol in dt.Columns) {
\r
450 Console.WriteLine(schemaCol.ColumnName +
\r
452 schemaRow[schemaCol]);
\r
453 Console.WriteLine("---Type: " + schemaRow[schemaCol].GetType ().ToString());
\r
454 Console.WriteLine();
\r
460 public static void DataAdapterTest2_Setup (OracleConnection con)
\r
462 Console.WriteLine (" Drop table mono_adapter_test ...");
464 OracleCommand cmd2 = con.CreateCommand ();
465 cmd2.CommandText = "DROP TABLE mono_adapter_test";
466 cmd2.ExecuteNonQuery ();
468 catch (OracleException) {
469 // ignore if table already exists
472 OracleCommand cmd = null;
474 Console.WriteLine(" Creating table mono_adapter_test...");
475 cmd = new OracleCommand ();
476 cmd.Connection = con;
477 cmd.CommandText = "CREATE TABLE mono_adapter_test ( " +
478 " varchar2_value VarChar2(32), " +
479 " number_whole_value Number(18) PRIMARY KEY, " +
480 " number_scaled_value Number(18,2), " +
481 " number_integer_value Integer, " +
482 " float_value Float, " +
483 " date_value Date, " +
484 " clob_value Clob, " +
485 " blob_value Blob ) ";
487 // FIXME: char_value does not work
489 cmd.CommandText = "CREATE TABLE mono_adapter_test ( " +
490 " varchar2_value VarChar2(32), " +
491 " number_whole_value Number(18) PRIMARY KEY, " +
492 " number_scaled_value Number(18,2), " +
493 " number_integer_value Integer, " +
494 " float_value Float, " +
495 " date_value Date, " +
496 " char_value Char(32), " +
497 " clob_value Clob, " +
498 " blob_value Blob ) ";
501 cmd.ExecuteNonQuery();
503 Console.WriteLine(" Begin Trans for table mono_adapter_test...");
504 OracleTransaction trans = con.BeginTransaction ();
506 Console.WriteLine(" Inserting value into mono_adapter_test...");
507 cmd = new OracleCommand();
508 cmd.Connection = con;
509 cmd.Transaction = trans;
511 cmd.CommandText = "INSERT INTO mono_adapter_test " +
512 " ( varchar2_value, " +
513 " number_whole_value, " +
514 " number_scaled_value, " +
515 " number_integer_value, " +
527 " TO_DATE( '2004-12-31', 'YYYY-MM-DD' ), " +
533 cmd.CommandText = "INSERT INTO mono_adapter_test " +
534 " ( varchar2_value, " +
535 " number_whole_value, " +
536 " number_scaled_value, " +
537 " number_integer_value, " +
550 " TO_DATE( '2004-12-31', 'YYYY-MM-DD' ), " +
556 cmd.ExecuteNonQuery();
\r
558 Console.WriteLine(" Select/Update CLOB columns on table mono_adapter_test...");
560 // update BLOB and CLOB columns
561 OracleCommand select = con.CreateCommand ();
562 select.Transaction = trans;
563 select.CommandText = "SELECT CLOB_VALUE, BLOB_VALUE FROM mono_adapter_test FOR UPDATE";
564 OracleDataReader reader = select.ExecuteReader ();
566 Console.WriteLine ("ERROR: RECORD NOT FOUND");
569 Console.WriteLine(" Update CLOB column on table mono_adapter_test...");
570 OracleLob clob = reader.GetOracleLob (0);
572 UnicodeEncoding encoding = new UnicodeEncoding ();
573 bytes = encoding.GetBytes ("Mono is fun!");
574 clob.Write (bytes, 0, bytes.Length);
578 Console.WriteLine(" Update BLOB column on table mono_adapter_test...");
579 OracleLob blob = reader.GetOracleLob (1);
580 bytes = new byte[6] { 0x31, 0x32, 0x33, 0x34, 0x35, 0x036 };
581 blob.Write (bytes, 0, bytes.Length);
584 Console.WriteLine(" Commit trans for table mono_adapter_test...");
587 CommitCursor (con);
\r
590 public static void DataAdapterTest2_Insert (OracleConnection con)
592 Console.WriteLine("================================");
\r
593 Console.WriteLine("=== Adapter Insert =============");
594 Console.WriteLine("================================");
\r
595 OracleTransaction transaction = con.BeginTransaction ();
597 Console.WriteLine(" Create adapter...");
\r
598 OracleDataAdapter da = new OracleDataAdapter("select * from mono_adapter_test", con);
599 da.SelectCommand.Transaction = transaction;
601 Console.WriteLine(" Create command builder...");
\r
602 OracleCommandBuilder mycb = new OracleCommandBuilder(da);
604 Console.WriteLine(" Create data set ...");
\r
605 DataSet ds = new DataSet();
\r
607 Console.WriteLine(" Fill data set via adapter...");
\r
608 da.Fill(ds, "mono_adapter_test");
\r
610 Console.WriteLine(" New Row...");
612 myRow = ds.Tables["mono_adapter_test"].NewRow();
614 byte[] bytes = new byte[] { 0x45,0x46,0x47,0x48,0x49,0x50 };
\r
616 Console.WriteLine(" Set values in the new DataRow...");
\r
617 myRow["varchar2_value"] = "OracleClient";
\r
618 myRow["number_whole_value"] = 22;
\r
619 myRow["number_scaled_value"] = 12.34;
\r
620 myRow["number_integer_value"] = 456;
\r
621 myRow["float_value"] = 98.76;
\r
622 myRow["date_value"] = new DateTime(2001,07,09);
\r
623 Console.WriteLine(" *** FIXME; char value not working");
\r
624 //myRow["char_value"] = "Romeo";
\r
625 myRow["clob_value"] = "clobtest";
\r
626 myRow["blob_value"] = bytes;
\r
628 Console.WriteLine(" Add DataRow to DataTable...");
\r
629 ds.Tables["mono_adapter_test"].Rows.Add(myRow);
631 Console.WriteLine("da.Update(ds...");
\r
632 da.Update(ds, "mono_adapter_test");
\r
634 transaction.Commit();
640 public static void DataAdapterTest2_Update (OracleConnection con)
642 Console.WriteLine("================================");
\r
643 Console.WriteLine("=== Adapter Update =============");
644 Console.WriteLine("================================");
\r
646 OracleTransaction transaction = con.BeginTransaction ();
648 Console.WriteLine(" Create adapter...");
\r
649 OracleCommand selectCmd = con.CreateCommand ();
650 selectCmd.Transaction = transaction;
\r
651 selectCmd.CommandText = "SELECT * FROM mono_adapter_test";
\r
652 OracleDataAdapter da = new OracleDataAdapter(selectCmd);
\r
653 Console.WriteLine(" Create command builder...");
\r
654 OracleCommandBuilder mycb = new OracleCommandBuilder(da);
\r
655 Console.WriteLine(" Create data set ...");
\r
656 DataSet ds = new DataSet();
\r
658 Console.WriteLine(" Set missing schema action...");
\r
660 Console.WriteLine(" Fill data set via adapter...");
\r
661 da.Fill(ds, "mono_adapter_test");
\r
664 Console.WriteLine(" New Row...");
665 myRow = ds.Tables["mono_adapter_test"].Rows[0];
667 Console.WriteLine("Tables Count: " + ds.Tables.Count.ToString());
669 DataTable table = ds.Tables["mono_adapter_test"];
670 DataRowCollection rows;
672 Console.WriteLine(" Row Count: " + rows.Count.ToString());
675 byte[] bytes = new byte[] { 0x62,0x63,0x64,0x65,0x66,0x67 };
\r
677 Console.WriteLine(" Set values in the new DataRow...");
\r
679 myRow["varchar2_value"] = "Super Power!";
\r
681 myRow["number_scaled_value"] = 12.35;
\r
682 myRow["number_integer_value"] = 457;
\r
683 myRow["float_value"] = 198.76;
\r
684 myRow["date_value"] = new DateTime(2002,08,09);
\r
685 //myRow["char_value"] = "Juliet";
\r
686 myRow["clob_value"] = "this is a clob";
\r
687 myRow["blob_value"] = bytes;
689 Console.WriteLine("da.Update(ds...");
\r
690 da.Update(ds, "mono_adapter_test");
\r
692 transaction.Commit();
698 public static void DataAdapterTest2_Delete (OracleConnection con)
700 Console.WriteLine("================================");
\r
701 Console.WriteLine("=== Adapter Delete =============");
702 Console.WriteLine("================================");
\r
703 OracleTransaction transaction = con.BeginTransaction ();
705 Console.WriteLine(" Create adapter...");
\r
706 OracleDataAdapter da = new OracleDataAdapter("SELECT * FROM mono_adapter_test", con);
707 Console.WriteLine(" Create command builder...");
708 OracleCommandBuilder mycb = new OracleCommandBuilder(da);
709 Console.WriteLine(" set transr...");
710 da.SelectCommand.Transaction = transaction;
712 Console.WriteLine(" Create data set ...");
\r
713 DataSet ds = new DataSet();
\r
715 Console.WriteLine("Fill data set via adapter...");
\r
716 da.Fill(ds, "mono_adapter_test");
\r
718 Console.WriteLine("delete row...");
719 ds.Tables["mono_adapter_test"].Rows[0].Delete();
721 Console.WriteLine("da.Update(table...");
\r
722 da.Update(ds, "mono_adapter_test");
\r
724 Console.WriteLine("Commit...");
\r
725 transaction.Commit();
731 static void TestNonQueryUsingExecuteReader(OracleConnection con)
\r
733 OracleDataReader reader = null;
\r
734 OracleTransaction trans = null;
\r
736 Console.WriteLine(" drop table mono_adapter_test...");
\r
737 OracleCommand cmd = con.CreateCommand();
\r
739 cmd.CommandText = "DROP TABLE MONO_ADAPTER_TEST";
\r
740 trans = con.BeginTransaction();
\r
741 cmd.Transaction = trans;
\r
743 reader = cmd.ExecuteReader();
\r
744 Console.WriteLine(" RowsAffected before read: " + reader.RecordsAffected.ToString());
\r
746 Console.WriteLine(" RowsAffected after read: " + reader.RecordsAffected.ToString());
\r
748 Console.WriteLine(" RowsAffected after close: " + reader.RecordsAffected.ToString());
\r
751 catch(OracleException e) {
\r
752 Console.WriteLine(" OracleException caught: " + e.Message);
\r
756 Console.WriteLine(" Create table mono_adapter_test...");
\r
757 cmd.CommandText = "CREATE TABLE MONO_ADAPTER_TEST ( " +
758 " varchar2_value VarChar2(32), " +
759 " number_whole_value Number(18,0) PRIMARY KEY ) ";
\r
760 trans = con.BeginTransaction();
\r
761 cmd.Transaction = trans;
\r
762 reader = cmd.ExecuteReader();
\r
763 Console.WriteLine(" RowsAffected before read: " + reader.RecordsAffected.ToString());
\r
765 Console.WriteLine(" RowsAffected after read: " + reader.RecordsAffected.ToString());
\r
767 Console.WriteLine(" RowsAffected after close: " + reader.RecordsAffected.ToString());
\r
770 Console.WriteLine("Insert into table mono_adapter_test...");
\r
773 "INSERT INTO MONO_ADAPTER_TEST " +
\r
774 "(VARCHAR2_VALUE,NUMBER_WHOLE_VALUE) " +
\r
777 OracleCommand cmd2 = con.CreateCommand();
\r
778 trans = con.BeginTransaction();
\r
779 cmd2.Transaction = trans;
\r
780 cmd2.CommandText = sql;
\r
782 OracleParameter myParameter1 = new OracleParameter("p1", OracleType.VarChar, 32);
783 myParameter1.Direction = ParameterDirection.Input;
\r
785 OracleParameter myParameter2 = new OracleParameter("p2", OracleType.Number);
\r
786 myParameter2.Direction = ParameterDirection.Input;
\r
788 myParameter2.Value = 182;
\r
789 myParameter1.Value = "Mono";
\r
791 cmd2.Parameters.Add (myParameter1);
\r
792 cmd2.Parameters.Add (myParameter2);
\r
795 reader = cmd2.ExecuteReader();
\r
796 Console.WriteLine(" RowsAffected before read: " + reader.RecordsAffected.ToString());
\r
798 Console.WriteLine(" RowsAffected after read: " + reader.RecordsAffected.ToString());
\r
800 Console.WriteLine(" RowsAffected after close: " + reader.RecordsAffected.ToString());
\r
802 // insert another record
\r
803 Console.WriteLine(" Insert another record...");
\r
804 myParameter2.Value = 183;
\r
805 myParameter1.Value = "Oracle";
\r
806 reader = cmd2.ExecuteReader();
\r
807 Console.WriteLine(" RowsAffected before read: " + reader.RecordsAffected.ToString());
\r
809 Console.WriteLine(" RowsAffected after read: " + reader.RecordsAffected.ToString());
\r
811 Console.WriteLine(" RowsAffected after close: " + reader.RecordsAffected.ToString());
\r
816 ReadSimpleTest(con, "SELECT * FROM MONO_ADAPTER_TEST");
\r
819 static void CommitCursor (OracleConnection con)
821 OracleCommand cmd = con.CreateCommand ();
822 cmd.CommandText = "COMMIT";
823 cmd.ExecuteNonQuery ();
828 static void RollbackTest (OracleConnection connection)
830 OracleTransaction transaction = connection.BeginTransaction ();
832 OracleCommand insert = connection.CreateCommand ();
833 insert.Transaction = transaction;
834 insert.CommandText = "INSERT INTO SCOTT.EMP (EMPNO, ENAME, JOB) VALUES (8787, 'T Coleman', 'Monoist')";
836 Console.WriteLine (" Inserting record ...");
838 insert.ExecuteNonQuery ();
840 OracleCommand select = connection.CreateCommand ();
841 select.CommandText = "SELECT COUNT(*) FROM SCOTT.EMP WHERE EMPNO = 8787";
842 select.Transaction = transaction;
843 OracleDataReader reader = select.ExecuteReader ();
846 Console.WriteLine (" Row count SHOULD BE 1, VALUE IS {0}", reader.GetValue (0));
849 Console.WriteLine (" Rolling back transaction ...");
851 transaction.Rollback ();
853 select = connection.CreateCommand ();
854 select.CommandText = "SELECT COUNT(*) FROM SCOTT.EMP WHERE EMPNO = 8787";
856 reader = select.ExecuteReader ();
858 Console.WriteLine (" Row count SHOULD BE 0, VALUE IS {0}", reader.GetValue (0));
862 static void CommitTest (OracleConnection connection)
864 OracleTransaction transaction = connection.BeginTransaction ();
866 OracleCommand insert = connection.CreateCommand ();
867 insert.Transaction = transaction;
868 insert.CommandText = "INSERT INTO SCOTT.EMP (EMPNO, ENAME, JOB) VALUES (8787, 'T Coleman', 'Monoist')";
870 Console.WriteLine (" Inserting record ...");
872 insert.ExecuteNonQuery ();
874 OracleCommand select = connection.CreateCommand ();
875 select.CommandText = "SELECT COUNT(*) FROM SCOTT.EMP WHERE EMPNO = 8787";
876 select.Transaction = transaction;
878 Console.WriteLine (" Row count SHOULD BE 1, VALUE IS {0}", select.ExecuteScalar ());
880 Console.WriteLine (" Committing transaction ...");
882 transaction.Commit ();
884 select = connection.CreateCommand ();
885 select.CommandText = "SELECT COUNT(*) FROM SCOTT.EMP WHERE EMPNO = 8787";
887 Console.WriteLine ("Row count SHOULD BE 1, VALUE IS {0}", select.ExecuteScalar ());
888 transaction = connection.BeginTransaction ();
889 OracleCommand delete = connection.CreateCommand ();
890 delete.Transaction = transaction;
891 delete.CommandText = "DELETE FROM SCOTT.EMP WHERE EMPNO = 8787";
892 delete.ExecuteNonQuery ();
893 transaction.Commit ();
896 public static void ParameterTest2 (OracleConnection connection)
898 Console.WriteLine(" Setting NLS_DATE_FORMAT...");
\r
900 OracleCommand cmd2 = connection.CreateCommand();
\r
901 cmd2.CommandText = "ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'";
\r
903 cmd2.ExecuteNonQuery ();
\r
905 Console.WriteLine(" Drop table MONO_TEST_TABLE2...");
907 cmd2.CommandText = "DROP TABLE MONO_TEST_TABLE7";
908 cmd2.ExecuteNonQuery ();
910 catch(OracleException) {
911 // ignore if table already exists
914 Console.WriteLine(" Create table MONO_TEST_TABLE7...");
916 cmd2.CommandText = "CREATE TABLE MONO_TEST_TABLE7(" +
917 " COL1 VARCHAR2(8) NOT NULL, " +
918 " COL2 VARCHAR2(32), " +
919 " COL3 NUMBER(18,2), " +
920 " COL4 NUMBER(18,2), " +
921 " COL5 DATE NOT NULL, " +
923 " COL7 BLOB NOT NULL, " +
925 " COL9 CLOB NOT NULL, " +
928 cmd2.ExecuteNonQuery ();
930 Console.WriteLine(" COMMIT...");
931 cmd2.CommandText = "COMMIT";
932 cmd2.ExecuteNonQuery ();
934 Console.WriteLine(" create insert command...");
936 OracleTransaction trans = connection.BeginTransaction ();
\r
937 OracleCommand cmd = connection.CreateCommand ();
\r
938 cmd.Transaction = trans;
\r
940 cmd.CommandText = "INSERT INTO MONO_TEST_TABLE7 " +
\r
941 "(COL1,COL2,COL3,COL4,COL5,COL6,COL7,COL8,COL9,COL10) " +
\r
942 "VALUES(:P1,:P2,:P3,:P4,:P5,:P6,:P7,:P8,:P9,:P10)";
\r
944 Console.WriteLine(" Add parameters...");
\r
946 OracleParameter parm1 = cmd.Parameters.Add (":P1", OracleType.VarChar, 8);
\r
947 OracleParameter parm2 = cmd.Parameters.Add (":P2", OracleType.VarChar, 32);
\r
949 OracleParameter parm3 = cmd.Parameters.Add (":P3", OracleType.Number);
\r
950 OracleParameter parm4 = cmd.Parameters.Add (":P4", OracleType.Number);
\r
952 OracleParameter parm5 = cmd.Parameters.Add (":P5", OracleType.DateTime);
\r
953 OracleParameter parm6 = cmd.Parameters.Add (":P6", OracleType.DateTime);
\r
955 // FIXME: fix BLOBs and CLOBs in OracleParameter
\r
957 OracleParameter parm7 = cmd.Parameters.Add (":P7", OracleType.Blob);
\r
958 OracleParameter parm8 = cmd.Parameters.Add (":P8", OracleType.Blob);
\r
960 OracleParameter parm9 = cmd.Parameters.Add (":P9", OracleType.Clob);
\r
961 OracleParameter parm10 = cmd.Parameters.Add (":P10", OracleType.Clob);
\r
963 // TODO: implement out, return, and ref parameters
\r
966 decimal d = 123456789012345.678M;
\r
967 DateTime dt = DateTime.Now;
\r
969 string clob = "Clob";
\r
970 byte[] blob = new byte[] { 0x31, 0x32, 0x33, 0x34, 0x35 };
\r
972 Console.WriteLine(" Set Values...");
\r
975 parm2.Value = DBNull.Value;
\r
978 parm4.Value = DBNull.Value;
\r
981 parm6.Value = DBNull.Value;
\r
983 parm7.Value = blob;
\r
984 parm8.Value = DBNull.Value;
\r
986 parm9.Value = clob;
\r
987 parm10.Value = DBNull.Value;
\r
989 Console.WriteLine(" ExecuteNonQuery...");
\r
991 cmd.ExecuteNonQuery ();
\r
995 public static void ParameterTest (OracleConnection connection)
997 Console.WriteLine(" Setting NLS_DATE_FORMAT...");
\r
999 OracleCommand cmd2 = connection.CreateCommand();
\r
1000 cmd2.CommandText = "ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'";
\r
1002 cmd2.ExecuteNonQuery ();
\r
1004 Console.WriteLine(" Drop table MONO_TEST_TABLE2...");
1006 cmd2.CommandText = "DROP TABLE MONO_TEST_TABLE7";
1007 cmd2.ExecuteNonQuery ();
1009 catch(OracleException) {
1010 // ignore if table already exists
1013 Console.WriteLine(" Create table MONO_TEST_TABLE7...");
1015 cmd2.CommandText = "CREATE TABLE MONO_TEST_TABLE7(" +
1016 " COL1 VARCHAR2(8) NOT NULL, " +
1017 " COL2 VARCHAR2(32), " +
1018 " COL3 NUMBER(18,2) NOT NULL, " +
1019 " COL4 NUMBER(18,2), " +
1020 " COL5 DATE NOT NULL, " +
1022 " COL7 BLOB NOT NULL, " +
1024 " COL9 CLOB NOT NULL, " +
1027 cmd2.ExecuteNonQuery ();
1029 Console.WriteLine(" COMMIT...");
1030 cmd2.CommandText = "COMMIT";
1031 cmd2.ExecuteNonQuery ();
1033 Console.WriteLine(" create insert command...");
1035 OracleTransaction trans = connection.BeginTransaction ();
\r
1036 OracleCommand cmd = connection.CreateCommand ();
\r
1037 cmd.Transaction = trans;
\r
1039 cmd.CommandText = "INSERT INTO MONO_TEST_TABLE7 " +
\r
1040 "(COL1,COL2,COL3,COL4,COL5,COL6,COL7,COL8,COL9,COL10) " +
\r
1041 "VALUES(:P1,:P2,:P3,:P4,:P5,:P6,:P7,:P8,:P9,:P10)";
\r
1043 Console.WriteLine(" Add parameters...");
\r
1045 OracleParameter parm1 = cmd.Parameters.Add (":P1", OracleType.VarChar, 8);
\r
1046 OracleParameter parm2 = cmd.Parameters.Add (":P2", OracleType.VarChar, 32);
\r
1048 OracleParameter parm3 = cmd.Parameters.Add (":P3", OracleType.Number);
\r
1049 OracleParameter parm4 = cmd.Parameters.Add (":P4", OracleType.Number);
\r
1051 OracleParameter parm5 = cmd.Parameters.Add (":P5", OracleType.DateTime);
\r
1052 OracleParameter parm6 = cmd.Parameters.Add (":P6", OracleType.DateTime);
\r
1054 // FIXME: fix BLOBs and CLOBs in OracleParameter
\r
1056 OracleParameter parm7 = cmd.Parameters.Add (":P7", OracleType.Blob);
\r
1057 OracleParameter parm8 = cmd.Parameters.Add (":P8", OracleType.Blob);
\r
1059 OracleParameter parm9 = cmd.Parameters.Add (":P9", OracleType.Clob);
\r
1060 OracleParameter parm10 = cmd.Parameters.Add (":P10", OracleType.Clob);
\r
1062 // TODO: implement out, return, and ref parameters
\r
1064 string s = "Mono";
\r
1065 decimal d = 123456789012345.678M;
\r
1066 DateTime dt = DateTime.Now;
\r
1068 string clob = "Clob";
\r
1069 byte[] blob = new byte[] { 0x31, 0x32, 0x33, 0x34, 0x35 };
\r
1071 Console.WriteLine(" Set Values...");
\r
1074 parm2.Value = DBNull.Value;
\r
1077 parm4.Value = DBNull.Value;
\r
1080 parm6.Value = DBNull.Value;
\r
1082 parm7.Value = blob;
\r
1083 parm8.Value = DBNull.Value;
\r
1085 parm9.Value = clob;
\r
1086 parm10.Value = DBNull.Value;
\r
1088 Console.WriteLine(" ExecuteNonQuery...");
\r
1090 cmd.ExecuteNonQuery ();
\r
1094 public static void CLOBTest (OracleConnection connection)
1096 Console.WriteLine (" BEGIN TRANSACTION ...");
1098 OracleTransaction transaction = connection.BeginTransaction ();
1100 Console.WriteLine (" Drop table CLOBTEST ...");
1102 OracleCommand cmd2 = connection.CreateCommand ();
1103 cmd2.Transaction = transaction;
1104 cmd2.CommandText = "DROP TABLE CLOBTEST";
1105 cmd2.ExecuteNonQuery ();
1107 catch (OracleException) {
1108 // ignore if table already exists
1111 Console.WriteLine (" CREATE TABLE ...");
1113 OracleCommand create = connection.CreateCommand ();
1114 create.Transaction = transaction;
1115 create.CommandText = "CREATE TABLE CLOBTEST (CLOB_COLUMN CLOB)";
1116 create.ExecuteNonQuery ();
1118 Console.WriteLine (" INSERT RECORD ...");
1120 OracleCommand insert = connection.CreateCommand ();
1121 insert.Transaction = transaction;
1122 insert.CommandText = "INSERT INTO CLOBTEST VALUES (EMPTY_CLOB())";
1123 insert.ExecuteNonQuery ();
1125 OracleCommand select = connection.CreateCommand ();
1126 select.Transaction = transaction;
1127 select.CommandText = "SELECT CLOB_COLUMN FROM CLOBTEST FOR UPDATE";
1128 Console.WriteLine (" SELECTING A CLOB (CHARACTER) VALUE FROM CLOBTEST");
1130 OracleDataReader reader = select.ExecuteReader ();
1131 if (!reader.Read ())
1132 Console.WriteLine ("ERROR: RECORD NOT FOUND");
1134 Console.WriteLine (" TESTING OracleLob OBJECT ...");
1135 OracleLob lob = reader.GetOracleLob (0);
1136 Console.WriteLine (" LENGTH: {0}", lob.Length);
1137 Console.WriteLine (" CHUNK SIZE: {0}", lob.ChunkSize);
1139 UnicodeEncoding encoding = new UnicodeEncoding ();
1141 byte[] value = new byte [lob.Length * 2];
1143 Console.WriteLine (" CURRENT POSITION: {0}", lob.Position);
1144 Console.WriteLine (" UPDATING VALUE TO 'TEST ME!'");
1145 value = encoding.GetBytes ("TEST ME!");
1146 lob.Write (value, 0, value.Length);
1148 Console.WriteLine (" CURRENT POSITION: {0}", lob.Position);
1149 Console.WriteLine (" RE-READ VALUE...");
1150 lob.Seek (1, SeekOrigin.Begin);
1152 Console.WriteLine (" CURRENT POSITION: {0}", lob.Position);
1153 value = new byte [lob.Length * 2];
1154 lob.Read (value, 0, value.Length);
1155 Console.WriteLine (" VALUE: {0}", encoding.GetString (value));
1156 Console.WriteLine (" CURRENT POSITION: {0}", lob.Position);
1158 Console.WriteLine (" CLOSE OracleLob...");
1161 Console.WriteLine (" CLOSING READER...");
1164 transaction.Commit ();
1167 public static void BLOBTest (OracleConnection connection)
1169 Console.WriteLine (" BEGIN TRANSACTION ...");
1171 OracleTransaction transaction = connection.BeginTransaction ();
1173 Console.WriteLine (" Drop table BLOBTEST ...");
1175 OracleCommand cmd2 = connection.CreateCommand ();
1176 cmd2.Transaction = transaction;
1177 cmd2.CommandText = "DROP TABLE BLOBTEST";
1178 cmd2.ExecuteNonQuery ();
1180 catch (OracleException) {
1181 // ignore if table already exists
1184 Console.WriteLine (" CREATE TABLE ...");
1186 OracleCommand create = connection.CreateCommand ();
1187 create.Transaction = transaction;
1188 create.CommandText = "CREATE TABLE BLOBTEST (BLOB_COLUMN BLOB)";
1189 create.ExecuteNonQuery ();
1191 Console.WriteLine (" INSERT RECORD ...");
1193 OracleCommand insert = connection.CreateCommand ();
1194 insert.Transaction = transaction;
1195 insert.CommandText = "INSERT INTO BLOBTEST VALUES (EMPTY_BLOB())";
1196 insert.ExecuteNonQuery ();
1198 OracleCommand select = connection.CreateCommand ();
1199 select.Transaction = transaction;
1200 select.CommandText = "SELECT BLOB_COLUMN FROM BLOBTEST FOR UPDATE";
1201 Console.WriteLine (" SELECTING A BLOB (Binary) VALUE FROM BLOBTEST");
1203 OracleDataReader reader = select.ExecuteReader ();
1204 if (!reader.Read ())
1205 Console.WriteLine ("ERROR: RECORD NOT FOUND");
1207 Console.WriteLine (" TESTING OracleLob OBJECT ...");
1208 OracleLob lob = reader.GetOracleLob (0);
1210 byte[] value = null;
1213 Console.WriteLine (" UPDATING VALUE");
1215 byte[] bytes = new byte[6];
1223 lob.Write (bytes, 0, bytes.Length);
1225 Console.WriteLine (" CURRENT POSITION: {0}", lob.Position);
1226 Console.WriteLine (" RE-READ VALUE...");
1227 lob.Seek (1, SeekOrigin.Begin);
1229 Console.WriteLine (" CURRENT POSITION: {0}", lob.Position);
1230 value = new byte [lob.Length];
1231 lob.Read (value, 0, value.Length);
1234 if (value.GetType ().ToString ().Equals ("System.Byte[]"))
1235 bvalue = GetHexString (value);
1236 Console.WriteLine (" Bytes: " + bvalue);
1238 Console.WriteLine (" CURRENT POSITION: {0}", lob.Position);
1240 Console.WriteLine (" CLOSE OracleLob...");
1243 Console.WriteLine (" CLOSING READER...");
1246 transaction.Commit ();
1249 static void Wait(string msg)
1251 Console.WriteLine(msg);
1253 Console.WriteLine("Waiting... Press Enter to continue...");
1257 // use this function to read a byte array into a string
1258 // for easy display of binary data, such as, a BLOB value
1259 public static string GetHexString (byte[] bytes)
1263 StringBuilder sb2 = new StringBuilder();
1264 for (int z = 0; z < bytes.Length; z++) {
1265 byte byt = bytes[z];
1268 sb2.Append (byt.ToString("x"));
1271 bvalue = "0x" + sb2.ToString ();
1276 static void StoredProcedureTest1 (OracleConnection con)
1278 // test stored procedure with no parameters
1281 OracleCommand cmd2 = con.CreateCommand ();
1283 Console.WriteLine(" Drop table MONO_TEST_TABLE1...");
1285 cmd2.CommandText = "DROP TABLE MONO_TEST_TABLE1";
1286 cmd2.ExecuteNonQuery ();
1288 catch(OracleException) {
1289 // ignore if table did not exist
1292 Console.WriteLine(" Drop procedure SP_TEST1...");
1294 cmd2.CommandText = "DROP PROCEDURE SP_TEST1";
1295 cmd2.ExecuteNonQuery ();
1297 catch(OracleException) {
1298 // ignore if procedure did not exist
1301 Console.WriteLine(" Create table MONO_TEST_TABLE1...");
1302 cmd2.CommandText = "CREATE TABLE MONO_TEST_TABLE1 (" +
1303 " COL1 VARCHAR2(8), "+
1304 " COL2 VARCHAR2(32))";
1305 cmd2.ExecuteNonQuery ();
1307 Console.WriteLine(" Create stored procedure SP_TEST1...");
1308 cmd2.CommandText = "CREATE PROCEDURE SP_TEST1 " +
1311 " INSERT INTO MONO_TEST_TABLE1 (COL1,COL2) VALUES ('aaa','bbbb');" +
1314 cmd2.ExecuteNonQuery ();
1316 Console.WriteLine("COMMIT...");
1317 cmd2.CommandText = "COMMIT";
1318 cmd2.ExecuteNonQuery ();
1320 Console.WriteLine(" Call stored procedure sp_test1...");
1321 OracleCommand cmd3 = con.CreateCommand ();
\r
1322 cmd3.CommandType = CommandType.StoredProcedure;
\r
1323 cmd3.CommandText = "sp_test1";
\r
1324 cmd3.ExecuteNonQuery ();
1327 static void StoredProcedureTest2 (OracleConnection con)
1329 // test stored procedure with 2 parameters
1331 Console.WriteLine(" Drop table MONO_TEST_TABLE2...");
1332 OracleCommand cmd2 = con.CreateCommand ();
1335 cmd2.CommandText = "DROP TABLE MONO_TEST_TABLE2";
1336 cmd2.ExecuteNonQuery ();
1338 catch(OracleException) {
1339 // ignore if table already exists
1342 Console.WriteLine(" Drop procedure SP_TEST2...");
1344 cmd2.CommandText = "DROP PROCEDURE SP_TEST2";
1345 cmd2.ExecuteNonQuery ();
1347 catch(OracleException) {
1348 // ignore if procedure does not exists
1351 Console.WriteLine(" Create table MONO_TEST_TABLE2...");
1353 cmd2.CommandText = "CREATE TABLE MONO_TEST_TABLE2 (" +
1354 " COL1 VARCHAR2(8), "+
1355 " COL2 VARCHAR2(32))";
1356 cmd2.ExecuteNonQuery ();
1358 Console.WriteLine(" Create stored procedure SP_TEST2...");
1359 cmd2.CommandText = "CREATE PROCEDURE SP_TEST2(parm1 VARCHAR2,parm2 VARCHAR2) " +
1362 " INSERT INTO MONO_TEST_TABLE2 (COL1,COL2) VALUES (parm1,parm2);" +
1365 cmd2.ExecuteNonQuery ();
1367 Console.WriteLine(" COMMIT...");
1368 cmd2.CommandText = "COMMIT";
1369 cmd2.ExecuteNonQuery ();
1371 Console.WriteLine(" Call stored procedure SP_TEST2 with two parameters...");
1372 OracleCommand cmd3 = con.CreateCommand ();
\r
1373 cmd3.CommandType = CommandType.StoredProcedure;
\r
1374 cmd3.CommandText = "sp_test2";
\r
1376 OracleParameter myParameter1 = new OracleParameter("parm1", OracleType.VarChar);
\r
1377 myParameter1.Value = "yyy13";
\r
1378 myParameter1.Size = 8;
\r
1379 myParameter1.Direction = ParameterDirection.Input;
\r
1381 OracleParameter myParameter2 = new OracleParameter("parm2", OracleType.VarChar);
\r
1382 myParameter2.Value = "iii13";
\r
1383 myParameter2.Size = 32;
\r
1384 myParameter2.Direction = ParameterDirection.Input;
\r
1386 cmd3.Parameters.Add (myParameter1);
\r
1387 cmd3.Parameters.Add (myParameter2);
\r
1389 cmd3.ExecuteNonQuery ();
1392 static void OutParmTest1(OracleConnection con)
1394 // test stored fuctions with 4 parameters
1395 // 1. input varchar2
1396 // 2. output varchar2
1397 // 3. input output varchar2
1398 // 4. return varchar2
1400 Console.WriteLine(" Create stored function SP_OUTPUTPARMTEST1 for testing VARCHAR2 Input, Output, InputOutput, Return parameters...");
1402 OracleCommand cmd2 = con.CreateCommand();
1404 "CREATE OR REPLACE FUNCTION SF_TESTOUTPARM1(parm1 IN VARCHAR2, parm2 OUT VARCHAR2, parm3 IN OUT VARCHAR2) RETURN VARCHAR2 " +
1406 " returnValue VARCHAR2(32) := 'Anywhere';" +
1408 " IF parm1 IS NULL THEN " +
1409 " parm2 := 'parm1 is null'; " +
1411 " parm2 := 'One' || parm1 || 'Three'; " +
1413 " IF parm3 IS NOT NULL THEN " +
1414 " parm3 := parm2 || parm3 || 'Five'; " +
1416 " parm3 := 'parm3 in was NULL'; " +
1418 " IF parm1 IS NOT NULL THEN " +
1419 " IF parm1 = '999' THEN " +
1420 " parm2 := NULL; " +
1421 " parm3 := NULL; " +
1422 " returnValue := NULL; " +
1425 " RETURN returnValue; " +
1428 cmd2.ExecuteNonQuery();
1430 Console.WriteLine(" COMMIT...");
1431 cmd2.CommandText = "COMMIT";
1432 cmd2.ExecuteNonQuery();
1434 Console.WriteLine(" Call stored function SF_TESTOUTPARM1 with 4 parameters...");
1435 OracleCommand cmd3 = con.CreateCommand();
1436 cmd3.CommandType = CommandType.Text;
1439 " :ReturnValue := SF_TESTOUTPARM1(:p1, :p2, :p3); " +
1441 OracleParameter myParameter1 = new OracleParameter("p1", OracleType.VarChar);
1442 myParameter1.Value = "Two";
1443 myParameter1.Size = 32;
1444 myParameter1.Direction = ParameterDirection.Input;
1446 OracleParameter myParameter2 = new OracleParameter("p2", OracleType.VarChar);
1447 myParameter2.Size = 32;
1448 myParameter2.Direction = ParameterDirection.Output;
1450 OracleParameter myParameter3 = new OracleParameter("p3", OracleType.VarChar);
1451 myParameter3.Value = "Four";
1452 myParameter3.Size = 32;
1453 myParameter3.Direction = ParameterDirection.InputOutput;
1455 OracleParameter myParameter4 = new OracleParameter("ReturnValue", OracleType.VarChar);
1456 myParameter4.Size = 32;
1457 myParameter4.Direction = ParameterDirection.ReturnValue;
1459 cmd3.Parameters.Add(myParameter1);
1460 cmd3.Parameters.Add(myParameter2);
1461 cmd3.Parameters.Add(myParameter3);
1462 cmd3.Parameters.Add(myParameter4);
1464 cmd3.ExecuteNonQuery();
1465 string outValue = (string)myParameter2.Value;
1466 string inOutValue = (string)myParameter3.Value;
1467 string returnValue = (string)myParameter4.Value;
1468 Console.WriteLine(" 1Out Value should be: OneTwoThree");
1469 Console.WriteLine(" 1Out Value: " + outValue);
1470 Console.WriteLine(" 1InOut Value should be: OneTwoThreeFourFive");
1471 Console.WriteLine(" 1InOut Value: " + inOutValue);
1472 Console.WriteLine(" 1Return Value should be: Anywhere");
1473 Console.WriteLine(" 1Return Value: " + returnValue);
1474 Console.WriteLine();
1476 myParameter1.Value = DBNull.Value;
1477 myParameter3.Value = "Hello";
1478 cmd3.ExecuteNonQuery();
1479 outValue = (string)myParameter2.Value;
1480 inOutValue = (string)myParameter3.Value;
1481 returnValue = (string)myParameter4.Value;
1482 Console.WriteLine(" 2Out Value should be: parm1 is null");
1483 Console.WriteLine(" 2Out Value: " + outValue);
1484 Console.WriteLine(" 2InOut Value should be: parm1 is nullHelloFive");
1485 Console.WriteLine(" 2InOut Value: " + inOutValue);
1486 Console.WriteLine(" 2Return Value should be: Anywhere");
1487 Console.WriteLine(" 2Return Value: " + returnValue);
1488 Console.WriteLine();
1490 myParameter1.Value = "999";
1491 myParameter3.Value = "Bye";
1492 cmd3.ExecuteNonQuery();
1493 if (myParameter2.Value == DBNull.Value)
1494 outValue = "Value is DBNull.Value";
1496 outValue = (string)myParameter2.Value;
1497 if( myParameter3.Value == DBNull.Value)
1498 inOutValue = "Value is DBNull.Value";
1500 inOutValue = (string)myParameter3.Value;
1501 if (myParameter4.Value == DBNull.Value)
1502 returnValue = "Value is DBNull.Value";
1504 returnValue = (string)myParameter4.Value;
1505 Console.WriteLine(" 3Out Value should be: Value is DBNull.Value");
1506 Console.WriteLine(" 3Out Value: " + outValue);
1507 Console.WriteLine(" 3InOut Value should be: Value is DBNull.Value");
1508 Console.WriteLine(" 3InOut Value: " + inOutValue);
1509 Console.WriteLine(" 3Return Value should be: Value is DBNull.Value");
1510 Console.WriteLine(" 3Return Value: " + returnValue);
1511 Console.WriteLine();
1513 myParameter1.Value = "***";
1514 myParameter3.Value = DBNull.Value;
1515 cmd3.ExecuteNonQuery();
1516 outValue = (string)myParameter2.Value;
1517 inOutValue = (string)myParameter3.Value;
1518 returnValue = (string)myParameter4.Value;
1519 Console.WriteLine(" 4Out Value should be: One***Three");
1520 Console.WriteLine(" 4Out Value: " + outValue);
1521 Console.WriteLine(" 4InOut Value should be: parm3 in was NULL");
1522 Console.WriteLine(" 4InOut Value: " + inOutValue);
1523 Console.WriteLine(" 4Return Value should be: Anywhere");
1524 Console.WriteLine(" 4Return Value: " + returnValue);
1525 Console.WriteLine();
1528 static void OutParmTest2 (OracleConnection con)
1530 // test stored function with 4 parameters
1531 // 1. input number(18,2)
1532 // 2. output number(18,2)
1533 // 3. input output number (18,2)
1534 // 4. return number (18,2)
1536 Console.WriteLine(" Create stored function SF_TESTOUTPARM2 to test NUMBER parameters...");
1538 // stored procedure addes two numbers
1539 OracleCommand cmd2 = con.CreateCommand();
1541 "CREATE OR REPLACE FUNCTION SF_TESTOUTPARM2(parm1 IN NUMBER, parm2 OUT NUMBER, parm3 IN OUT NUMBER) RETURN NUMBER " +
1543 " returnValue NUMBER := 123.45; " +
1545 " IF parm1 IS NULL THEN " +
1547 " parm3 := parm3 + 8000; " +
1548 " returnValue := 78; " +
1549 " ELSIF parm1 = 999 THEN " +
1552 " returnValue := NULL;" +
1553 " ELSIF parm3 IS NULL THEN " +
1555 " parm3 := 1234567890123.12345678; " +
1557 " parm2 := parm1 + 3; " +
1558 " parm3 := parm3 + 70; " +
1560 " RETURN returnValue;" +
1563 cmd2.ExecuteNonQuery();
1565 Console.WriteLine(" COMMIT...");
1566 cmd2.CommandText = "COMMIT";
1567 cmd2.ExecuteNonQuery();
1569 Console.WriteLine(" Call stored function SP_TESTOUTPARM2 with 4 parameters...");
1570 OracleCommand cmd3 = con.CreateCommand();
1571 cmd3.CommandType = CommandType.Text;
1574 " :returnValue := SF_TESTOUTPARM2(:p1, :p2, :p3);" +
1576 OracleParameter myParameter1 = new OracleParameter("p1", OracleType.Number);
1577 myParameter1.Value = 2.2;
1578 myParameter1.Direction = ParameterDirection.Input;
1580 OracleParameter myParameter2 = new OracleParameter("p2", OracleType.Number);
1581 myParameter2.Direction = ParameterDirection.Output;
1583 OracleParameter myParameter3 = new OracleParameter("p3", OracleType.Number);
1584 myParameter3.Value = 33.4;
1585 myParameter3.Direction = ParameterDirection.InputOutput;
1587 OracleParameter myParameter4 = new OracleParameter("returnValue", OracleType.Number);
1588 myParameter4.Direction = ParameterDirection.ReturnValue;
1590 cmd3.Parameters.Add(myParameter1);
1591 cmd3.Parameters.Add(myParameter2);
1592 cmd3.Parameters.Add(myParameter3);
1593 cmd3.Parameters.Add(myParameter4);
1595 cmd3.ExecuteNonQuery();
1596 decimal outValue = (decimal)myParameter2.Value;
1597 decimal inOutValue = (decimal)myParameter3.Value;
1598 decimal returnValue = (decimal)myParameter4.Value;
1599 Console.WriteLine(" 1Out Value should be: 5.20");
1600 Console.WriteLine(" 1Out Value: {0}", outValue);
1601 Console.WriteLine(" 1InOut Value should be: 103.40");
1602 Console.WriteLine(" 1InOut Value: {0}", inOutValue);
1603 Console.WriteLine(" 1Return Value should be: 123.45");
1604 Console.WriteLine(" 1Return Value: {0}", returnValue);
1605 Console.WriteLine();
1607 myParameter1.Value = DBNull.Value;
1608 myParameter3.Value = 23;
1609 cmd3.ExecuteNonQuery();
1610 outValue = (decimal)myParameter2.Value;
1611 inOutValue = (decimal)myParameter3.Value;
1612 returnValue = (decimal)myParameter4.Value;
1613 Console.WriteLine(" 2Out Value should be: 18");
1614 Console.WriteLine(" 2Out Value: {0}", outValue);
1615 Console.WriteLine(" 2InOut Value should be: 8023");
1616 Console.WriteLine(" 2InOut Value: {0}", inOutValue);
1617 Console.WriteLine(" 2Return Value should be: 78");
1618 Console.WriteLine(" 2Return Value: {0}", returnValue);
1619 Console.WriteLine();
1621 string soutValue = "";
1622 string sinOutValue = "";
1623 string sreturnValue = "";
1624 myParameter1.Value = 999;
1625 myParameter3.Value = 66;
1626 cmd3.ExecuteNonQuery();
1627 if (myParameter2.Value == DBNull.Value)
1628 soutValue = "DBNull.Value";
1630 soutValue = myParameter2.Value.ToString();
1631 if (myParameter3.Value == DBNull.Value)
1632 sinOutValue = "DBNull.Value";
1634 sinOutValue = myParameter3.Value.ToString();
1635 if (myParameter4.Value == DBNull.Value)
1636 sreturnValue = "DBNull.Value";
1638 sreturnValue = myParameter4.Value.ToString();
1639 Console.WriteLine(" 3Out Value should be: DBNull.Value");
1640 Console.WriteLine(" 3Out Value: {0}", soutValue);
1641 Console.WriteLine(" 3InOut Value should be: DBNull.Value");
1642 Console.WriteLine(" 3InOut Value: {0}", sinOutValue);
1643 Console.WriteLine(" 3Return Value should be: DBNull.Value");
1644 Console.WriteLine(" 3Return Value: {0}", sreturnValue);
1645 Console.WriteLine();
1647 myParameter1.Value = 111;
1648 myParameter3.Value = DBNull.Value;
1649 cmd3.ExecuteNonQuery();
1650 outValue = (decimal)myParameter2.Value;
1651 inOutValue = (decimal)myParameter3.Value;
1652 returnValue = (decimal)myParameter4.Value;
1653 Console.WriteLine(" 4Out Value should be: 0 (as in digit zero)");
1654 Console.WriteLine(" 4Out Value: {0}", outValue);
1655 Console.WriteLine(" 4InOut Value should be: 1234567890123.12345678");
1656 Console.WriteLine(" 4InOut Value: {0}", inOutValue);
1657 Console.WriteLine(" 4Return Value should be: 123.45");
1658 Console.WriteLine(" 4Return Value: {0}", returnValue);
1659 Console.WriteLine();
1663 static void OutParmTest3 (OracleConnection con)
1665 // test stored function with 4 parameters
1668 // 3. input output date
1671 // a DATE type in Oracle has Date and Time
1673 Console.WriteLine(" Create stored function SF_TESTOUTPARM3 to test Date parameters...");
1675 OracleCommand cmd2 = con.CreateCommand();
1677 "CREATE OR REPLACE FUNCTION SF_TESTOUTPARM3(parm1 IN DATE, parm2 OUT DATE, parm3 IN OUT DATE) RETURN DATE " +
1679 " returnValue DATE := TO_DATE('2001-07-01 15:32:52', 'YYYY-MM-DD HH24:MI:SS');" +
1681 " IF parm1 IS NULL THEN " +
1682 " parm2 := TO_DATE('1900-12-31', 'YYYY-MM-DD'); " +
1683 " parm3 := TO_DATE('1900-12-31', 'YYYY-MM-DD'); " +
1684 " ELSIF parm1 = TO_DATE('1979-11-25','YYYY-MM-DD') THEN " +
1687 " returnValue := NULL;"+
1688 " ELSIF parm3 IS NULL THEN " +
1689 " parm2 := TO_DATE('2008-08-08', 'YYYY-MM-DD');" +
1690 " parm3 := TO_DATE('2000-01-01', 'YYYY-MM-DD');" +
1692 " -- add 3 days to date\n " +
1693 " parm2 := parm1 + 3; " +
1694 " parm3 := parm3 + 5; " +
1696 " RETURN returnValue;" +
1699 cmd2.ExecuteNonQuery();
1701 Console.WriteLine(" COMMIT...");
1702 cmd2.CommandText = "COMMIT";
1703 cmd2.ExecuteNonQuery();
1705 Console.WriteLine(" Call stored function SF_TESTOUTPARM3 with 4 parameters...");
1706 OracleCommand cmd3 = con.CreateCommand();
1707 cmd3.CommandType = CommandType.Text;
1710 " :returnValue := SF_TESTOUTPARM3(:p1, :p2, :p3);" +
1712 OracleParameter myParameter1 = new OracleParameter("p1", OracleType.DateTime);
1713 myParameter1.Value = new DateTime(2004, 12, 15);
1714 myParameter1.Direction = ParameterDirection.Input;
1716 OracleParameter myParameter2 = new OracleParameter("p2", OracleType.DateTime);
1717 myParameter2.Direction = ParameterDirection.Output;
1719 OracleParameter myParameter3 = new OracleParameter("p3", OracleType.DateTime);
1720 myParameter3.Value = new DateTime(2008, 10, 14, 20, 21, 22);
1721 myParameter3.Direction = ParameterDirection.InputOutput;
1723 OracleParameter myParameter4 = new OracleParameter("returnValue", OracleType.DateTime);
1724 myParameter4.Direction = ParameterDirection.ReturnValue;
1726 cmd3.Parameters.Add(myParameter1);
1727 cmd3.Parameters.Add(myParameter2);
1728 cmd3.Parameters.Add(myParameter3);
1729 cmd3.Parameters.Add(myParameter4);
1731 cmd3.ExecuteNonQuery();
1732 DateTime outValue = (DateTime)myParameter2.Value;
1733 DateTime inOutValue = (DateTime)myParameter3.Value;
1734 DateTime returnValue = (DateTime)myParameter4.Value;
1735 Console.WriteLine(" 1Out Value should be: 2004-12-18 00:00:00");
1736 Console.WriteLine(" 1Out Value: {0}", outValue.ToString("yyyy-MM-dd HH:mm:ss"));
1737 Console.WriteLine(" 1InOut Value should be: 2008-10-19 20:21:22");
1738 Console.WriteLine(" 1InOut Value: {0}", inOutValue.ToString("yyyy-MM-dd HH:mm:ss"));
1739 Console.WriteLine(" 1Return Value should be: 2001-07-01 15:32:52");
1740 Console.WriteLine(" 1Return Value: {0}", returnValue.ToString("yyyy-MM-dd HH:mm:ss"));
1741 Console.WriteLine();
1743 myParameter1.Value = DBNull.Value;
1744 myParameter3.Value = new DateTime(1980, 11, 22);
1745 cmd3.ExecuteNonQuery();
1746 outValue = (DateTime)myParameter2.Value;
1747 inOutValue = (DateTime)myParameter3.Value;
1748 returnValue = (DateTime)myParameter4.Value;
1749 Console.WriteLine(" 2Out Value should be: 1900-12-31 00:00:00");
1750 Console.WriteLine(" 2Out Value: {0}", outValue.ToString("yyyy-MM-dd HH:mm:ss"));
1751 Console.WriteLine(" 2InOut Value should be: 1900-12-31 00:00:00");
1752 Console.WriteLine(" 2InOut Value: {0}", inOutValue.ToString("yyyy-MM-dd HH:mm:ss"));
1753 Console.WriteLine(" 2Return Value should be: 2001-07-01 15:32:52");
1754 Console.WriteLine(" 2Return Value: {0}", returnValue.ToString("yyyy-MM-dd HH:mm:ss"));
1755 Console.WriteLine();
1757 myParameter1.Value = new DateTime(1979, 11, 25);
1758 myParameter3.Value = new DateTime(1981, 12, 14);
1759 cmd3.ExecuteNonQuery();
1760 string soutValue = "";
1761 string sinOutValue = "";
1762 string sreturnValue = "";
1763 if (myParameter2.Value == DBNull.Value)
1764 soutValue = "DBNull.Value";
1766 outValue = (DateTime)myParameter2.Value;
1767 soutValue = outValue.ToString("yyyy-MM-dd HH:mm:ss");
1769 if (myParameter3.Value == DBNull.Value)
1770 sinOutValue = "DBNull.Value";
1772 inOutValue = (DateTime)myParameter3.Value;
1773 sinOutValue = inOutValue.ToString("yyyy-MM-dd HH:mm:ss");
1775 if (myParameter4.Value == DBNull.Value)
1776 sreturnValue = "DBNull.Value";
1778 returnValue = (DateTime)myParameter4.Value;
1779 sreturnValue = returnValue.ToString("yyyy-MM-dd HH:mm:ss");
1781 Console.WriteLine(" 3Out Value should be: DBNull.Value");
1782 Console.WriteLine(" 3Out Value: {0}", soutValue);
1783 Console.WriteLine(" 3InOut Value should be: DBNull.Value");
1784 Console.WriteLine(" 3InOut Value: {0}", sinOutValue);
1785 Console.WriteLine(" 3Return Value should be: DBNull.Value");
1786 Console.WriteLine(" 3Return Value: {0}", sreturnValue);
1787 Console.WriteLine();
1789 myParameter1.Value = new DateTime(1976, 7, 4);
1790 myParameter3.Value = DBNull.Value;
1791 cmd3.ExecuteNonQuery();
1792 outValue = (DateTime)myParameter2.Value;
1793 inOutValue = (DateTime)myParameter3.Value;
1794 returnValue = (DateTime)myParameter4.Value;
1795 Console.WriteLine(" 4Out Value should be: 2008-08-08 00:00:00");
1796 Console.WriteLine(" 4Out Value: {0}", outValue.ToString("yyyy-MM-dd HH:mm:ss"));
1797 Console.WriteLine(" 4InOut Value should be: 2000-01-01 00:00:00");
1798 Console.WriteLine(" 4InOut Value: {0}", inOutValue.ToString("yyyy-MM-dd HH:mm:ss"));
1799 Console.WriteLine(" 4Return Value should be: 2001-07-01 15:32:52");
1800 Console.WriteLine(" 4Return Value: {0}", returnValue.ToString("yyyy-MM-dd HH:mm:ss"));
1801 Console.WriteLine();
1805 static void OutParmTest4(OracleConnection con)
1807 // test stored fuctions with 4 parameters
1810 // 3. input output long
1813 Console.WriteLine(" Create stored function SP_OUTPUTPARMTEST4 for testing LONG VARCHAR Input, Output, InputOutput, Return parameters...");
1815 OracleCommand cmd2 = con.CreateCommand();
1817 "CREATE OR REPLACE FUNCTION SP_OUTPUTPARMTEST4(parm1 IN LONG, parm2 OUT LONG, parm3 IN OUT LONG) RETURN LONG " +
1819 " returnValue LONG := 'A very, very, very long value in a far away memory space.'; " +
1821 " IF parm1 IS NULL THEN " +
1822 " parm2 := 'parm1 is null'; " +
1823 " returnValue := 'Another one bytes the dust.'; " +
1825 " parm2 := 'One' || parm1 || 'Three'; " +
1827 " IF parm3 IS NOT NULL THEN " +
1828 " parm3 := parm2 || parm3 || 'Five'; " +
1830 " parm3 := 'parm3 in was NULL'; " +
1832 " IF parm1 IS NOT NULL THEN " +
1833 " IF parm1 = '999' THEN " +
1834 " parm2 := NULL; " +
1835 " parm3 := NULL; " +
1836 " returnValue := NULL; " +
1839 " RETURN returnValue; " +
1842 cmd2.ExecuteNonQuery();
1844 Console.WriteLine(" COMMIT...");
1845 cmd2.CommandText = "COMMIT";
1846 cmd2.ExecuteNonQuery();
1848 Console.WriteLine(" Call stored procedure SP_OUTPUTPARMTEST4 with 4 parameters...");
1849 OracleCommand cmd3 = con.CreateCommand();
1850 cmd3.CommandType = CommandType.Text;
1853 " :ReturnValue := SP_OUTPUTPARMTEST4(:p1, :p2, :p3); " +
1855 OracleParameter myParameter1 = new OracleParameter("p1", OracleType.LongVarChar);
1856 myParameter1.Size = 1000;
1857 myParameter1.Direction = ParameterDirection.Input;
1858 myParameter1.Value = "Two";
1860 OracleParameter myParameter2 = new OracleParameter("p2", OracleType.LongVarChar);
1861 myParameter2.Size = 1000;
1862 myParameter2.Direction = ParameterDirection.Output;
1864 OracleParameter myParameter3 = new OracleParameter("p3", OracleType.LongVarChar);
1865 myParameter3.Value = "Four";
1866 myParameter3.Size = 1000;
1867 myParameter3.Direction = ParameterDirection.InputOutput;
1869 OracleParameter myParameter4 = new OracleParameter("ReturnValue", OracleType.LongVarChar);
1870 myParameter4.Size = 1000;
1871 myParameter4.Direction = ParameterDirection.ReturnValue;
1873 cmd3.Parameters.Add(myParameter1);
1874 cmd3.Parameters.Add(myParameter2);
1875 cmd3.Parameters.Add(myParameter3);
1876 cmd3.Parameters.Add(myParameter4);
1878 cmd3.ExecuteNonQuery();
1879 string outValue = (string)myParameter2.Value;
1880 string inOutValue = (string)myParameter3.Value;
1881 string returnValue = (string)myParameter4.Value;
1882 Console.WriteLine(" 1Out Value should be: OneTwoThree");
1883 Console.WriteLine(" 1Out Value: " + outValue);
1884 Console.WriteLine(" 1InOut Value should be: OneTwoThreeFourFive");
1885 Console.WriteLine(" 1InOut Value: " + inOutValue);
1886 Console.WriteLine(" 1Return Value should be: A very, very, very long value in a far away memory space.");
1887 Console.WriteLine(" 1Return Value: " + returnValue);
1888 Console.WriteLine();
1890 myParameter1.Value = DBNull.Value;
1891 myParameter3.Value = "Hello";
1892 cmd3.ExecuteNonQuery();
1893 outValue = (string)myParameter2.Value;
1894 inOutValue = (string)myParameter3.Value;
1895 returnValue = (string)myParameter4.Value;
1896 Console.WriteLine(" 2Out Value should be: parm1 is null");
1897 Console.WriteLine(" 2Out Value: " + outValue);
1898 Console.WriteLine(" 2InOut Value should be: parm1 is nullHelloFive");
1899 Console.WriteLine(" 2InOut Value: " + inOutValue);
1900 Console.WriteLine(" 2Return Value should be: Another one bytes the dust.");
1901 Console.WriteLine(" 2Return Value: " + returnValue);
1902 Console.WriteLine();
1904 myParameter1.Value = "999";
1905 myParameter3.Value = "Bye";
1906 cmd3.ExecuteNonQuery();
1907 if (myParameter2.Value == DBNull.Value)
1908 outValue = "Value is DBNull.Value";
1910 outValue = (string)myParameter2.Value;
1911 if (myParameter3.Value == DBNull.Value)
1912 inOutValue = "Value is DBNullValue";
1914 inOutValue = (string)myParameter3.Value;
1915 if (myParameter4.Value == DBNull.Value)
1916 returnValue = "Value is DBNull.Value";
1918 returnValue = (string)myParameter4.Value;
1919 Console.WriteLine(" 3Out Value should be: Value is DBNull.Value");
1920 Console.WriteLine(" 3Out Value: " + outValue);
1921 Console.WriteLine(" 3InOut Value should be: Value is DBNull.Value");
1922 Console.WriteLine(" 3InOut Value: " + inOutValue);
1923 Console.WriteLine(" 3Return Value should be: Value is DBNull.Value");
1924 Console.WriteLine(" 3Return Value: " + returnValue);
1925 Console.WriteLine();
1927 myParameter1.Value = "***";
1928 myParameter3.Value = DBNull.Value;
1929 cmd3.ExecuteNonQuery();
1930 outValue = (string)myParameter2.Value;
1931 inOutValue = (string)myParameter3.Value;
1932 returnValue = (string)myParameter4.Value;
1933 Console.WriteLine(" 4Out Value should be: One***Three");
1934 Console.WriteLine(" 4Out Value: " + outValue);
1935 Console.WriteLine(" 4InOut Value should be: parm3 in was NULL");
1936 Console.WriteLine(" 4InOut Value: " + inOutValue);
1937 Console.WriteLine(" 4Return Value should be: A very, very, very long value in a far away memory space.");
1938 Console.WriteLine(" 4Return Value: " + returnValue);
1939 Console.WriteLine();
1942 static void OutParmTest5(OracleConnection con)
1944 // test stored fuctions with 4 parameters
1947 // 3. input output CLOB
1950 Console.WriteLine(" Create stored function SP_OUTPUTPARMTEST5 for testing CLOB Input, Output, InputOutput, Return parameters...");
1952 OracleCommand cmd2 = con.CreateCommand();
1954 "CREATE OR REPLACE FUNCTION SP_OUTPUTPARMTEST5(parm1 IN CLOB, parm2 OUT CLOB, parm3 IN OUT CLOB) RETURN CLOB " +
1956 " returnValue CLOB := 'Clobber'; " +
1958 " IF parm1 IS NULL THEN " +
1959 " parm2 := 'parm1 is null'; " +
1961 " parm2 := 'One' || parm1 || 'Three'; " +
1963 " IF parm3 IS NOT NULL THEN " +
1964 " parm3 := parm2 || parm3 || 'Five'; " +
1966 " parm3 := 'parm3 in was NULL'; " +
1968 " IF parm1 IS NOT NULL THEN " +
1969 " IF parm1 = '999' THEN " +
1970 " parm2 := NULL; " +
1971 " parm3 := NULL; " +
1972 " returnValue := NULL; " +
1973 " ELSIF LENGTH(parm1) = 0 THEN " +
1974 " parm2 := 'parm1 is zero length'; " +
1975 " IF LENGTH(parm3) = 0 THEN " +
1976 " parm3 := 'parm3 is zero length';" +
1978 " parm3 := 'Uh oh, parm3 is not zero length like we thought'; " +
1980 " returnValue := 'parm1 is zero length'; " +
1981 " ELSIF parm1 = '888' THEN " +
1982 " parm2 := EMPTY_CLOB(); " +
1983 " parm3 := EMPTY_CLOB(); " +
1984 " returnValue := EMPTY_CLOB(); " +
1987 " RETURN returnValue; " +
1990 cmd2.ExecuteNonQuery();
1992 Console.WriteLine(" COMMIT...");
1993 cmd2.CommandText = "COMMIT";
1994 cmd2.ExecuteNonQuery();
1996 Console.WriteLine(" Call stored procedure SP_OUTPUTPARMTEST5 with 4 parameters...");
1997 //OracleTransaction trans = con.BeginTransaction();
1998 //OracleCommand cmd4 = con.CreateCommand();
1999 //cmd4.Transaction = trans;
2000 //OracleLob lob = CreateTemporaryLobLocator(cmd4, OracleType.Clob);
2002 OracleCommand cmd3 = con.CreateCommand();
2003 //cmd3.Transaction = trans;
2004 cmd3.CommandType = CommandType.Text;
2009 " tempP3 := :inp3; " +
2010 " :ReturnValue := SP_OUTPUTPARMTEST5(:p1, :p2, tempP3); " +
2011 " :outp3 := tempP3;" +
2013 OracleParameter myParameter1 = new OracleParameter("p1", OracleType.Clob);
2014 myParameter1.Size = 1000;
2015 myParameter1.Direction = ParameterDirection.Input;
2016 myParameter1.Value = "Two";
2018 OracleParameter myParameter2 = new OracleParameter("p2", OracleType.Clob);
2019 myParameter2.Size = 1000;
2020 myParameter2.Direction = ParameterDirection.Output;
2022 // impossible to use one OracleParameter for an CLOB IN OUT parameter?
2023 // I had to create two parameters for the 3rd parameter: in3 as input and out3 as output
2024 // and in the anonymous PL/SQL block, get and set the 3rd parameter appropriately
2026 OracleParameter myParameterIn3 = new OracleParameter("inp3", OracleType.Clob);
2027 myParameterIn3.Size = 1000;
2028 myParameterIn3.Direction = ParameterDirection.Input;
2029 string s = "Everything";
2030 myParameterIn3.Value = s;
2032 OracleParameter myParameterOut3 = new OracleParameter("outp3", OracleType.Clob);
2033 myParameterOut3.Size = 1000;
2034 myParameterOut3.Direction = ParameterDirection.Output;
2036 OracleParameter myParameter4 = new OracleParameter("ReturnValue", OracleType.Clob);
2037 myParameter4.Size = 1000;
2038 myParameter4.Direction = ParameterDirection.ReturnValue;
2040 cmd3.Parameters.Add(myParameter1);
2041 cmd3.Parameters.Add(myParameter2);
2042 cmd3.Parameters.Add(myParameterIn3);
2043 cmd3.Parameters.Add(myParameterOut3);
2044 cmd3.Parameters.Add(myParameter4);
2046 cmd3.ExecuteNonQuery();
2048 string outValue = GetOracleClobValue(myParameter2);
2049 string inOutValue = GetOracleClobValue(myParameterOut3);
2050 string returnValue = GetOracleClobValue(myParameter4);
2051 Console.WriteLine(" 1Out Value should be: OneTwoThree");
2052 Console.WriteLine(" 1Out Value: " + outValue);
2053 Console.WriteLine(" 1InOut Value should be: OneTwoThreeEverythingFive");
2054 Console.WriteLine(" 1InOut Value: " + inOutValue);
2055 Console.WriteLine(" 1Return Value should be: Clobber");
2056 Console.WriteLine(" 1Return Value: " + returnValue);
2057 Console.WriteLine();
2059 myParameter1.Value = DBNull.Value;
2060 myParameterIn3.Value = "Hello";
2061 cmd3.ExecuteNonQuery();
2062 outValue = GetOracleClobValue(myParameter2);
2063 inOutValue = GetOracleClobValue(myParameterOut3);
2064 returnValue = GetOracleClobValue(myParameter4);
2065 Console.WriteLine(" 2Out Value should be: parm1 is null");
2066 Console.WriteLine(" 2Out Value: " + outValue);
2067 Console.WriteLine(" 2InOut Value should be: parm1 is nullHelloFive");
2068 Console.WriteLine(" 2InOut Value: " + inOutValue);
2069 Console.WriteLine(" 2Return Value should be: Clobber");
2070 Console.WriteLine(" 2Return Value: " + returnValue);
2071 Console.WriteLine();
2073 myParameter1.Value = "999";
2074 myParameterIn3.Value = "Bye";
2075 cmd3.ExecuteNonQuery();
2076 outValue = GetOracleClobValue(myParameter2);
2077 inOutValue = GetOracleClobValue(myParameterOut3);
2078 returnValue = GetOracleClobValue(myParameter4);
2079 Console.WriteLine(" 3Out Value should be: Value is DBNull.Value");
2080 Console.WriteLine(" 3Out Value: " + outValue);
2081 Console.WriteLine(" 3InOut Value should be: Value is DBNull.Value");
2082 Console.WriteLine(" 3InOut Value: " + inOutValue);
2083 Console.WriteLine(" 3Return Value should be: Value is DBNull.Value");
2084 Console.WriteLine(" 3Return Value: " + returnValue);
2085 Console.WriteLine();
2087 myParameter1.Value = "***";
2088 myParameterIn3.Value = DBNull.Value;
2089 cmd3.ExecuteNonQuery();
2090 outValue = GetOracleClobValue(myParameter2);
2091 inOutValue = GetOracleClobValue(myParameterOut3);
2092 returnValue = GetOracleClobValue(myParameter4);
2093 Console.WriteLine(" 4Out Value should be: One***Three");
2094 Console.WriteLine(" 4Out Value: " + outValue);
2095 Console.WriteLine(" 4InOut Value should be: parm3 in was NULL");
2096 Console.WriteLine(" 4InOut Value: " + inOutValue);
2097 Console.WriteLine(" 4Return Value should be: Clobber");
2098 Console.WriteLine(" 4Return Value: " + returnValue);
2099 Console.WriteLine();
2101 myParameter1.Value = OracleLob.Null;
2102 myParameterIn3.Value = "bass";
2103 cmd3.ExecuteNonQuery();
2104 outValue = GetOracleClobValue(myParameter2);
2105 inOutValue = GetOracleClobValue(myParameterOut3);
2106 returnValue = GetOracleClobValue(myParameter4);
2107 Console.WriteLine(" 5Out Value should be: parm1 is null");
2108 Console.WriteLine(" 5Out Value: " + outValue);
2109 Console.WriteLine(" 5InOut Value should be: parm1 is nullbassFive");
2110 Console.WriteLine(" 5InOut Value: " + inOutValue);
2111 Console.WriteLine(" 5Return Value should be: Clobber");
2112 Console.WriteLine(" 5Return Value: " + returnValue);
2113 Console.WriteLine();
2115 myParameter1.Value = "888";
2116 myParameterIn3.Value = "777";
2117 cmd3.ExecuteNonQuery();
2118 outValue = GetOracleClobValue(myParameter2);
2119 inOutValue = GetOracleClobValue(myParameterOut3);
2120 returnValue = GetOracleClobValue(myParameter4);
2121 Console.WriteLine(" 6Out Value should be: Zero Length");
2122 Console.WriteLine(" 6Out Value: " + outValue);
2123 Console.WriteLine(" 6InOut Value should be: Zero Length");
2124 Console.WriteLine(" 6InOut Value: " + inOutValue);
2125 Console.WriteLine(" 6Return Value should be: Zero Length");
2126 Console.WriteLine(" 6Return Value: " + returnValue);
2127 Console.WriteLine();
2130 public static string GetOracleClobValue (OracleParameter parm)
2132 if (parm.Value.Equals (DBNull.Value))
2133 return "Clob is DBNull.Value";
2134 OracleLob lob = (OracleLob) parm.Value;
2135 if (lob.Length == 0)
2136 return "Zero Length";
2137 return lob.Value.ToString ();
2140 public static OracleLob CreateTemporaryLobLocator (OracleCommand cmd, OracleType lobType)
2143 "DECLARE TEMP_LOB " + lobType.ToString () + "; " +
2145 " SYS.DBMS_LOB.CREATETEMPORARY (TEMP_LOB, FALSE); " +
2146 " :TempLobLocator := TEMP_LOB; " +
2149 OracleParameter parm = cmd.Parameters.Add ("TempLobLocator", lobType);
2150 parm.Direction = ParameterDirection.Output;
2152 cmd.ExecuteNonQuery ();
2154 return (OracleLob)parm.Value;
2157 static void OutParmTest6 (OracleConnection con)
2159 // test stored function with 4 parameters
2160 // 1. input timestamp
2161 // 2. output timestamp
2162 // 3. input output timestamp
2163 // 4. return timestamp
2165 // a TIMESTAMP type in Oracle has Date and Time
2167 Console.WriteLine(" Create stored function SF_TESTOUTPARM6 to test Date parameters...");
2169 OracleCommand cmd2 = con.CreateCommand();
2171 "CREATE OR REPLACE FUNCTION SF_TESTOUTPARM6(parm1 IN TIMESTAMP, parm2 OUT TIMESTAMP, parm3 IN OUT TIMESTAMP) RETURN TIMESTAMP " +
2173 " returnValue TIMESTAMP := TO_TIMESTAMP('2001-07-01 15:32:52', 'YYYY-MM-DD HH24:MI:SS');" +
2175 " IF parm1 IS NULL THEN " +
2176 " parm2 := TO_TIMESTAMP('1900-12-31', 'YYYY-MM-DD'); " +
2177 " parm3 := TO_TIMESTAMP('1900-12-31', 'YYYY-MM-DD'); " +
2178 " ELSIF parm1 = TO_TIMESTAMP('1979-11-25','YYYY-MM-DD') THEN " +
2181 " returnValue := NULL;"+
2182 " ELSIF parm3 IS NULL THEN " +
2183 " parm2 := TO_TIMESTAMP('2008-08-08', 'YYYY-MM-DD');" +
2184 " parm3 := TO_TIMESTAMP('2000-01-01', 'YYYY-MM-DD');" +
2186 " -- add 3 days to date\n " +
2187 " parm2 := parm1 + 3; " +
2188 " parm3 := parm3 + 5; " +
2190 " RETURN returnValue;" +
2193 cmd2.ExecuteNonQuery();
2195 Console.WriteLine(" COMMIT...");
2196 cmd2.CommandText = "COMMIT";
2197 cmd2.ExecuteNonQuery();
2199 Console.WriteLine(" Call stored function SF_TESTOUTPARM6 with 4 parameters...");
2200 OracleCommand cmd3 = con.CreateCommand();
2201 cmd3.CommandType = CommandType.Text;
2204 " :returnValue := SF_TESTOUTPARM6(:p1, :p2, :p3);" +
2206 OracleParameter myParameter1 = new OracleParameter("p1", OracleType.Timestamp);
2207 myParameter1.Value = new DateTime(2004, 12, 15);
2208 myParameter1.Direction = ParameterDirection.Input;
2210 OracleParameter myParameter2 = new OracleParameter("p2", OracleType.Timestamp);
2211 myParameter2.Direction = ParameterDirection.Output;
2213 OracleParameter myParameter3 = new OracleParameter("p3", OracleType.Timestamp);
2214 myParameter3.Value = new DateTime(2008, 10, 14, 20, 21, 22);
2215 myParameter3.Direction = ParameterDirection.InputOutput;
2217 OracleParameter myParameter4 = new OracleParameter("returnValue", OracleType.Timestamp);
2218 myParameter4.Direction = ParameterDirection.ReturnValue;
2220 cmd3.Parameters.Add(myParameter1);
2221 cmd3.Parameters.Add(myParameter2);
2222 cmd3.Parameters.Add(myParameter3);
2223 cmd3.Parameters.Add(myParameter4);
2225 cmd3.ExecuteNonQuery();
2226 DateTime outValue = (DateTime)myParameter2.Value;
2227 DateTime inOutValue = (DateTime)myParameter3.Value;
2228 DateTime returnValue = (DateTime)myParameter4.Value;
2229 Console.WriteLine(" 1Out Value should be: 2004-12-18 00:00:00");
2230 Console.WriteLine(" 1Out Value: {0}", outValue.ToString("yyyy-MM-dd HH:mm:ss"));
2231 Console.WriteLine(" 1InOut Value should be: 2008-10-19 20:21:22");
2232 Console.WriteLine(" 1InOut Value: {0}", inOutValue.ToString("yyyy-MM-dd HH:mm:ss"));
2233 Console.WriteLine(" 1Return Value should be: 2001-07-01 15:32:52");
2234 Console.WriteLine(" 1Return Value: {0}", returnValue.ToString("yyyy-MM-dd HH:mm:ss"));
2235 Console.WriteLine();
2237 myParameter1.Value = DBNull.Value;
2238 myParameter3.Value = new DateTime(1980, 11, 22);
2239 cmd3.ExecuteNonQuery();
2240 outValue = (DateTime)myParameter2.Value;
2241 inOutValue = (DateTime)myParameter3.Value;
2242 returnValue = (DateTime)myParameter4.Value;
2243 Console.WriteLine(" 2Out Value should be: 1900-12-31 00:00:00");
2244 Console.WriteLine(" 2Out Value: {0}", outValue.ToString("yyyy-MM-dd HH:mm:ss"));
2245 Console.WriteLine(" 2InOut Value should be: 1900-12-31 00:00:00");
2246 Console.WriteLine(" 2InOut Value: {0}", inOutValue.ToString("yyyy-MM-dd HH:mm:ss"));
2247 Console.WriteLine(" 2Return Value should be: 2001-07-01 15:32:52");
2248 Console.WriteLine(" 2Return Value: {0}", returnValue.ToString("yyyy-MM-dd HH:mm:ss"));
2249 Console.WriteLine();
2251 myParameter1.Value = new DateTime(1979, 11, 25);
2252 myParameter3.Value = new DateTime(1981, 12, 14);
2253 cmd3.ExecuteNonQuery();
2254 string soutValue = "";
2255 string sinOutValue = "";
2256 string sreturnValue = "";
2257 if (myParameter2.Value == DBNull.Value)
2258 soutValue = "DBNull.Value";
2260 outValue = (DateTime)myParameter2.Value;
2261 soutValue = outValue.ToString("yyyy-MM-dd HH:mm:ss");
2263 if (myParameter3.Value == DBNull.Value)
2264 sinOutValue = "DBNull.Value";
2266 inOutValue = (DateTime)myParameter3.Value;
2267 sinOutValue = inOutValue.ToString("yyyy-MM-dd HH:mm:ss");
2269 if (myParameter4.Value == DBNull.Value)
2270 sreturnValue = "DBNull.Value";
2272 returnValue = (DateTime)myParameter4.Value;
2273 sreturnValue = returnValue.ToString("yyyy-MM-dd HH:mm:ss");
2275 Console.WriteLine(" 3Out Value should be: DBNull.Value");
2276 Console.WriteLine(" 3Out Value: {0}", soutValue);
2277 Console.WriteLine(" 3InOut Value should be: DBNull.Value");
2278 Console.WriteLine(" 3InOut Value: {0}", sinOutValue);
2279 Console.WriteLine(" 3Return Value should be: DBNull.Value");
2280 Console.WriteLine(" 3Return Value: {0}", sreturnValue);
2281 Console.WriteLine();
2283 myParameter1.Value = new DateTime(1976, 7, 4);
2284 myParameter3.Value = DBNull.Value;
2285 cmd3.ExecuteNonQuery();
2286 outValue = (DateTime)myParameter2.Value;
2287 inOutValue = (DateTime)myParameter3.Value;
2288 returnValue = (DateTime)myParameter4.Value;
2289 Console.WriteLine(" 4Out Value should be: 2008-08-08 00:00:00");
2290 Console.WriteLine(" 4Out Value: {0}", outValue.ToString("yyyy-MM-dd HH:mm:ss"));
2291 Console.WriteLine(" 4InOut Value should be: 2000-01-01 00:00:00");
2292 Console.WriteLine(" 4InOut Value: {0}", inOutValue.ToString("yyyy-MM-dd HH:mm:ss"));
2293 Console.WriteLine(" 4Return Value should be: 2001-07-01 15:32:52");
2294 Console.WriteLine(" 4Return Value: {0}", returnValue.ToString("yyyy-MM-dd HH:mm:ss"));
2295 Console.WriteLine();
2299 static void ShowConnectionProperties (OracleConnection con)
2302 Console.WriteLine ("ServerVersion: " + con.ServerVersion);
2303 } catch (System.InvalidOperationException ioe) {
\r
2304 Console.WriteLine ("InvalidOperationException caught.");
\r
2305 Console.WriteLine ("Message: " + ioe.Message);
\r
2308 Console.WriteLine ("DataSource: " + con.DataSource);
2311 static void NullAggregateTest (OracleConnection con)
2313 Console.WriteLine(" Drop table MONO_TEST_TABLE3...");
2314 OracleCommand cmd2 = con.CreateCommand ();
2317 cmd2.CommandText = "DROP TABLE MONO_TEST_TABLE3";
2318 cmd2.ExecuteNonQuery ();
2320 catch(OracleException) {
2321 // ignore if table already exists
2324 Console.WriteLine(" Create table MONO_TEST_TABLE3...");
2326 cmd2.CommandText = "CREATE TABLE MONO_TEST_TABLE3 (" +
2327 " COL1 VARCHAR2(8), "+
2328 " COL2 VARCHAR2(32))";
2330 cmd2.ExecuteNonQuery ();
2332 Console.WriteLine(" Insert some rows into table MONO_TEST_TABLE3...");
2333 cmd2.CommandText = "INSERT INTO MONO_TEST_TABLE3 (COL1, COL2) VALUES ('1','one')";
2334 cmd2.ExecuteNonQuery ();
2336 cmd2.CommandText = "INSERT INTO MONO_TEST_TABLE3 (COL1, COL2) VALUES ('1','uno')";
2337 cmd2.ExecuteNonQuery ();
2339 cmd2.CommandText = "INSERT INTO MONO_TEST_TABLE3 (COL1, COL2) VALUES ('3','three')";
2340 cmd2.ExecuteNonQuery ();
2342 cmd2.CommandText = "INSERT INTO MONO_TEST_TABLE3 (COL1, COL2) VALUES ('3', null)";
2343 cmd2.ExecuteNonQuery ();
2345 cmd2.CommandText = "INSERT INTO MONO_TEST_TABLE3 (COL1, COL2) VALUES ('3','few')";
2346 cmd2.ExecuteNonQuery ();
2348 Console.WriteLine(" ExecuteScalar...");
2349 cmd2.CommandText = "SELECT COL1, COUNT(COL2) AS MAX_COL1 FROM MONO_TEST_TABLE3 GROUP BY COL1";
2350 OracleDataReader reader = cmd2.ExecuteReader ();
2351 Console.WriteLine (" Read...");
2352 while (reader.Read ()) {
2354 object obj0 = reader.GetValue (0);
2355 Console.WriteLine("Value 0: " + obj0.ToString ());
2356 object obj1 = reader.GetValue (1);
2357 Console.WriteLine("Value 1: " + obj1.ToString ());
2359 Console.WriteLine (" Read...");
2362 Console.WriteLine (" No more records.");
2365 static void OnInfoMessage (object sender, OracleInfoMessageEventArgs e)
\r
2367 Console.WriteLine("InfoMessage Message: " + e.Message.ToString());
\r
2368 Console.WriteLine("InfoMessage Code: " + e.Code.ToString());
\r
2369 Console.WriteLine("InfoMessage Source: " + e.Source.ToString());
\r
2372 static void OnStateChange (object sender, StateChangeEventArgs e)
\r
2374 Console.WriteLine("StateChange CurrentSate:" + e.CurrentState.ToString ());
\r
2375 Console.WriteLine("StateChange OriginalState:" + e.OriginalState.ToString ());
\r
2378 static void RefCursorTests(OracleConnection con)
\r
2380 SetupRefCursorTests(con); // for ref cursor tests 1 thru 3
\r
2381 RefCursorTest1(con); // using BEGIN/END
\r
2382 RefCursorTest2(con); // using call
\r
2383 RefCursorTest3(con); // using CommandType.StoredProcedure
\r
2385 RefCursorTest4(con);
\r
2388 static void SetupRefCursorTests(OracleConnection con)
\r
2390 Console.WriteLine("Setup Oracle package curspkg_join...");
\r
2392 OracleCommand cmd = con.CreateCommand();
\r
2394 Console.Error.WriteLine(" create or replace package curspkg_join...");
\r
2395 cmd.CommandText =
\r
2396 "CREATE OR REPLACE PACKAGE curspkg_join AS\n" +
\r
2397 "TYPE t_cursor IS REF CURSOR;\n" +
\r
2398 "Procedure open_join_cursor1 (n_EMPNO IN NUMBER, io_cursor IN OUT t_cursor);\n" +
\r
2399 "END curspkg_join;";
\r
2400 cmd.ExecuteNonQuery();
2402 Console.Error.WriteLine(" create or replace package body curspkg_join...");
2403 cmd.CommandText =
\r
2404 "CREATE OR REPLACE PACKAGE BODY curspkg_join AS\n" +
\r
2405 " Procedure open_join_cursor1 (n_EMPNO IN NUMBER, io_cursor IN OUT t_cursor)\n" +
\r
2407 " v_cursor t_cursor;\n" +
\r
2409 " IF n_EMPNO <> 0 THEN\n" +
\r
2410 " OPEN v_cursor FOR\n" +
\r
2411 " SELECT EMP.EMPNO, EMP.ENAME, DEPT.DEPTNO, DEPT.DNAME\n" +
\r
2412 " FROM SCOTT.EMP, SCOTT.DEPT\n" +
\r
2413 " WHERE EMP.DEPTNO = DEPT.DEPTNO\n" +
\r
2414 " AND EMP.EMPNO = n_EMPNO;\n" +
\r
2417 " OPEN v_cursor FOR\n" +
\r
2418 " SELECT EMP.EMPNO, EMP.ENAME, DEPT.DEPTNO, DEPT.DNAME\n" +
\r
2419 " FROM SCOTT.EMP, SCOTT.DEPT\n" +
\r
2420 " WHERE EMP.DEPTNO = DEPT.DEPTNO;\n" +
\r
2423 " io_cursor := v_cursor;\n" +
\r
2424 " END open_join_cursor1;\n" +
\r
2425 "END curspkg_join;";
\r
2426 cmd.ExecuteNonQuery();
2428 cmd.CommandText = "commit";
\r
2429 cmd.ExecuteNonQuery();
\r
2432 public static void RefCursorTest4(OracleConnection connection)
\r
2434 Console.WriteLine("Setup test package and data for RefCursorTest4...");
\r
2435 OracleCommand cmddrop = connection.CreateCommand();
\r
2437 cmddrop.CommandText = "DROP TABLE TESTTABLE";
\r
2439 cmddrop.ExecuteNonQuery();
\r
2441 catch(OracleException e) {
\r
2442 Console.WriteLine("Ignore this error: " + e.Message);
\r
2444 cmddrop.Dispose();
\r
2447 OracleCommand cmd = connection.CreateCommand();
\r
2449 // create table TESTTABLE
\r
2450 cmd.CommandText =
\r
2451 "create table TESTTABLE (\n" +
\r
2452 " col1 numeric(18,0),\n" +
\r
2453 " col2 char(32),\n" +
\r
2455 cmd.ExecuteNonQuery();
\r
2457 // insert some rows into TESTTABLE
\r
2458 cmd.CommandText =
\r
2459 "insert into TESTTABLE\n" +
\r
2460 "(col1, col2, col3)\n" +
\r
2461 "values(45, 'Mono', sysdate)";
\r
2462 cmd.ExecuteNonQuery();
\r
2464 cmd.CommandText =
\r
2465 "insert into TESTTABLE\n" +
\r
2466 "(col1, col2, col3)\n" +
\r
2467 "values(136, 'Fun', sysdate)";
\r
2468 cmd.ExecuteNonQuery();
\r
2470 cmd.CommandText =
\r
2471 "insert into TESTTABLE\n" +
\r
2472 "(col1, col2, col3)\n" +
\r
2473 "values(526, 'System.Data.OracleClient', sysdate)";
\r
2474 cmd.ExecuteNonQuery();
\r
2476 cmd.CommandText = "commit";
\r
2477 cmd.ExecuteNonQuery();
\r
2479 // create Oracle package TestTablePkg
\r
2480 cmd.CommandText =
\r
2481 "CREATE OR REPLACE PACKAGE TestTablePkg\n" +
\r
2483 " TYPE T_CURSOR IS REF CURSOR;\n" +
\r
2485 " PROCEDURE GetData(tableCursor OUT T_CURSOR);\n" +
\r
2486 "END TestTablePkg;";
\r
2487 cmd.ExecuteNonQuery();
\r
2489 // create Oracle package body for package TestTablePkg
\r
2490 cmd.CommandText =
\r
2491 "CREATE OR REPLACE PACKAGE BODY TestTablePkg AS\n" +
\r
2492 " PROCEDURE GetData(tableCursor OUT T_CURSOR)\n" +
\r
2495 " OPEN tableCursor FOR\n" +
\r
2497 " FROM TestTable;\n" +
\r
2498 " END GetData;\n" +
\r
2499 "END TestTablePkg;";
\r
2500 cmd.ExecuteNonQuery();
\r
2505 Console.WriteLine("Set up command and parameters to call stored proc...");
\r
2506 OracleCommand command = new OracleCommand("TestTablePkg.GetData", connection);
\r
2507 command.CommandType = CommandType.StoredProcedure;
\r
2508 OracleParameter parameter = new OracleParameter("tableCursor", OracleType.Cursor);
\r
2509 parameter.Direction = ParameterDirection.Output;
\r
2510 command.Parameters.Add(parameter);
\r
2512 Console.WriteLine("Execute...");
\r
2513 command.ExecuteNonQuery();
\r
2515 Console.WriteLine("Get OracleDataReader for cursor output parameter...");
\r
2516 OracleDataReader reader = (OracleDataReader) parameter.Value;
\r
2518 Console.WriteLine("Read data...");
\r
2520 while (reader.Read()) {
\r
2521 Console.WriteLine("Row {0}", r);
\r
2522 for (int f = 0; f < reader.FieldCount; f ++) {
\r
2523 object val = reader.GetValue(f);
\r
2524 Console.WriteLine(" Field {0} Value: {1}", f, val.ToString());
\r
2528 Console.WriteLine("Rows retrieved: {0}", r);
\r
2530 Console.WriteLine("Clean up...");
\r
2533 command.Dispose();
\r
2537 static void RefCursorTest1(OracleConnection con)
\r
2539 Console.WriteLine("Ref Cursor Test 1 - using BEGIN/END for proc - Begin...");
\r
2541 Console.WriteLine("Create command...");
\r
2542 OracleCommand cmd = new OracleCommand();
\r
2543 cmd.Connection = con;
\r
2545 cmd.CommandText =
\r
2547 " curspkg_join.open_join_cursor1(:n_Empno,:io_cursor);\n" +
\r
2550 // PL/SQL definition of stored procedure in package curspkg_join
\r
2551 // open_join_cursor1 (n_EMPNO IN NUMBER, io_cursor IN OUT t_cursor)
\r
2553 Console.WriteLine("Create parameters...");
\r
2555 OracleParameter parm1 = new OracleParameter("n_Empno", OracleType.Number);
\r
2556 parm1.Direction = ParameterDirection.Input;
\r
2557 parm1.Value = 7902;
\r
2559 OracleParameter parm2 = new OracleParameter("io_cursor", OracleType.Cursor);
\r
2560 parm2.Direction = ParameterDirection.Output;
\r
2562 cmd.Parameters.Add(parm1);
\r
2563 cmd.Parameters.Add(parm2);
\r
2565 // positional parm
\r
2566 //cmd.Parameters.Add(new OracleParameter("io_cursor", OracleType.Cursor)).Direction = ParameterDirection.Output;
\r
2568 //cmd.Parameters.Add("n_Empno", OracleType.Number, 4).Value = 7902;
\r
2570 OracleDataReader reader;
\r
2571 Console.WriteLine("Execute Non Query...");
\r
2572 cmd.ExecuteNonQuery();
\r
2574 Console.WriteLine("Get data reader (ref cursor) from out parameter...");
\r
2575 reader = (OracleDataReader) cmd.Parameters["io_cursor"].Value;
\r
2580 Console.WriteLine("Get data from ref cursor...");
\r
2581 while (reader.Read()) {
\r
2582 for (x = 0; x < reader.FieldCount; x++)
\r
2583 Console.Write(reader[x] + " ");
\r
2585 Console.WriteLine();
\r
2588 Console.WriteLine(count.ToString() + " Rows Returned.");
\r
2593 static void RefCursorTest2(OracleConnection con)
\r
2595 Console.WriteLine("Ref Cursor Test 2 - using call - Begin...");
\r
2597 Console.WriteLine("Create command...");
\r
2598 OracleCommand cmd = new OracleCommand();
\r
2599 cmd.Connection = con;
\r
2600 cmd.CommandText = "call curspkg_join.open_join_cursor1(:n_Empno,:io_cursor)";
\r
2602 // PL/SQL definition of stored procedure in package curspkg_join
\r
2603 // open_join_cursor1 (n_EMPNO IN NUMBER, io_cursor IN OUT t_cursor)
\r
2605 Console.WriteLine("Create parameters...");
\r
2607 OracleParameter parm1 = new OracleParameter("n_Empno", OracleType.Number);
\r
2608 parm1.Direction = ParameterDirection.Input;
\r
2609 parm1.Value = 7902;
\r
2611 OracleParameter parm2 = new OracleParameter("io_cursor", OracleType.Cursor);
\r
2612 parm2.Direction = ParameterDirection.Output;
\r
2614 cmd.Parameters.Add(parm1);
\r
2615 cmd.Parameters.Add(parm2);
\r
2617 // positional parm
\r
2618 //cmd.Parameters.Add(new OracleParameter("io_cursor", OracleType.Cursor)).Direction = ParameterDirection.Output;
\r
2620 //cmd.Parameters.Add("n_Empno", OracleType.Number, 4).Value = 7902;
\r
2622 OracleDataReader reader;
\r
2623 Console.WriteLine("Execute Non Query...");
\r
2624 cmd.ExecuteNonQuery();
\r
2626 Console.WriteLine("Get data reader (ref cursor) from out parameter...");
\r
2627 reader = (OracleDataReader) cmd.Parameters["io_cursor"].Value;
\r
2632 Console.WriteLine("Get data from ref cursor...");
\r
2633 while (reader.Read()) {
\r
2634 for (x = 0; x < reader.FieldCount; x++)
\r
2635 Console.Write(reader[x] + " ");
\r
2637 Console.WriteLine();
\r
2640 Console.WriteLine(count.ToString() + " Rows Returned.");
\r
2645 static void RefCursorTest3(OracleConnection con)
\r
2647 Console.WriteLine("Ref Cursor Test 3 - CommandType.StoredProcedure - Begin...");
\r
2649 Console.WriteLine("Create command...");
\r
2650 OracleCommand cmd = new OracleCommand();
\r
2651 cmd.Connection = con;
\r
2652 cmd.CommandText = "curspkg_join.open_join_cursor1";
\r
2653 cmd.CommandType = CommandType.StoredProcedure;
\r
2655 // PL/SQL definition of stored procedure in package curspkg_join
\r
2656 // open_join_cursor1 (n_EMPNO IN NUMBER, io_cursor IN OUT t_cursor)
\r
2658 Console.WriteLine("Create parameters...");
\r
2660 OracleParameter parm1 = new OracleParameter("n_Empno", OracleType.Number);
\r
2661 parm1.Direction = ParameterDirection.Input;
\r
2662 parm1.Value = 7902;
\r
2664 OracleParameter parm2 = new OracleParameter("io_cursor", OracleType.Cursor);
\r
2665 parm2.Direction = ParameterDirection.Output;
\r
2667 cmd.Parameters.Add(parm1);
\r
2668 cmd.Parameters.Add(parm2);
\r
2670 // positional parm
\r
2671 //cmd.Parameters.Add(new OracleParameter("io_cursor", OracleType.Cursor)).Direction = ParameterDirection.Output;
\r
2673 //cmd.Parameters.Add("n_Empno", OracleType.Number, 4).Value = 7902;
\r
2675 OracleDataReader reader;
\r
2676 Console.WriteLine("Execute Non Query...");
\r
2677 cmd.ExecuteNonQuery();
\r
2679 Console.WriteLine("Get data reader (ref cursor) from out parameter...");
\r
2680 reader = (OracleDataReader) cmd.Parameters["io_cursor"].Value;
\r
2685 Console.WriteLine("Get data from ref cursor...");
\r
2686 while (reader.Read()) {
\r
2687 for (x = 0; x < reader.FieldCount; x++)
\r
2688 Console.Write(reader[x] + " ");
\r
2690 Console.WriteLine();
\r
2693 Console.WriteLine(count.ToString() + " Rows Returned.");
\r
2698 static void ExternalAuthenticationTest ()
\r
2700 string user = Environment.UserName;
\r
2701 if (!Environment.UserDomainName.Equals(String.Empty))
\r
2702 user = Environment.UserDomainName + "\\" + Environment.UserName;
\r
2703 Console.WriteLine("Environment UserDomainName and UserName: " + user);
\r
2704 Console.WriteLine("Open connection using external authentication...");
\r
2705 OracleConnection con = new OracleConnection("Data Source=palis;Integrated Security=true");
\r
2708 OracleCommand cmd = con.CreateCommand();
\r
2709 cmd.CommandText = "SELECT USER FROM DUAL";
\r
2710 OracleDataReader reader = cmd.ExecuteReader();
\r
2711 if (reader.Read())
\r
2712 Console.WriteLine("User: " + reader.GetString(reader.GetOrdinal("USER")));
\r
2715 catch (Exception e) {
\r
2716 Console.WriteLine("Exception caught: " + e.Message);
\r
2717 Console.WriteLine("Probably not setup for external authentication.");
\r
2723 public static void TestPersistSucurityInfo1()
\r
2725 Console.WriteLine("\nTestPersistSucurityInfo1 - persist security info=false");
\r
2726 OracleConnection con = new OracleConnection("data source=palis;user id=scott;password=tiger;persist security info=false");
\r
2727 Console.WriteLine("ConnectionString before open: " + con.ConnectionString);
\r
2729 Console.WriteLine("ConnectionString after open: " + con.ConnectionString);
\r
2731 Console.WriteLine("ConnectionString after close: " + con.ConnectionString);
\r
2735 public static void TestPersistSucurityInfo2()
\r
2737 Console.WriteLine("\nTestPersistSucurityInfo2 - persist security info=true");
\r
2738 OracleConnection con = new OracleConnection("data source=palis;user id=scott;password=tiger;persist security info=true");
\r
2739 Console.WriteLine("ConnectionString before open: " + con.ConnectionString);
\r
2741 Console.WriteLine("ConnectionString after open: " + con.ConnectionString);
\r
2743 Console.WriteLine("ConnectionString after close: " + con.ConnectionString);
\r
2747 public static void TestPersistSucurityInfo3()
\r
2749 Console.WriteLine("\nTestPersistSucurityInfo3 - use default for persist security info which is false");
\r
2750 OracleConnection con = new OracleConnection("data source=palis;user id=scott;password=tiger");
\r
2751 Console.WriteLine("ConnectionString before open: " + con.ConnectionString);
\r
2753 Console.WriteLine("ConnectionString after open: " + con.ConnectionString);
\r
2755 Console.WriteLine("ConnectionString after close: " + con.ConnectionString);
\r
2759 public static void TestPersistSucurityInfo4()
\r
2761 Console.WriteLine("\nTestPersistSucurityInfo4 - persist security info=false with password at front");
\r
2762 OracleConnection con = new OracleConnection(";password=tiger;data source=palis;user id=scott;persist security info=false");
\r
2763 Console.WriteLine("ConnectionString before open: " + con.ConnectionString);
\r
2765 Console.WriteLine("ConnectionString after open: " + con.ConnectionString);
\r
2767 Console.WriteLine("ConnectionString after close: " + con.ConnectionString);
\r
2771 public static void TestPersistSucurityInfo5()
\r
2773 Console.WriteLine("\nTestPersistSucurityInfo5 - persist security info=false");
\r
2774 OracleConnection con = new OracleConnection("data source=palis;user id=scott;password=tiger;persist security info=false");
\r
2775 Console.WriteLine("ConnectionString before open: " + con.ConnectionString);
\r
2777 Console.WriteLine("ConnectionString after open: " + con.ConnectionString);
\r
2778 Console.WriteLine("ConnectionState for con: " + con.State.ToString() + "\n");
\r
2780 Console.WriteLine("Clone OracleConnection...");
\r
2781 OracleConnection con2 = (OracleConnection) ((ICloneable) con).Clone();
\r
2783 Console.WriteLine("ConnectionState for con2: " + con2.State.ToString());
\r
2784 Console.WriteLine("con2 ConnectionString before open: " + con2.ConnectionString);
\r
2786 Console.WriteLine("con2 ConnectionString after open: " + con2.ConnectionString);
\r
2788 Console.WriteLine("con2 ConnectionString after close: " + con2.ConnectionString);
\r
2793 public static void TestPersistSucurityInfo6()
\r
2795 Console.WriteLine("\nTestPersistSucurityInfo6 - external auth using persist security info");
\r
2797 string user = Environment.UserName;
\r
2798 if (!Environment.UserDomainName.Equals(String.Empty))
\r
2799 user = Environment.UserDomainName + "\\" + Environment.UserName;
\r
2800 Console.WriteLine("Environment UserDomainName and UserName: " + user);
\r
2801 Console.WriteLine("Open connection using external authentication...");
\r
2802 OracleConnection con = new OracleConnection("Data Source=palis;Integrated Security=true");
\r
2803 Console.WriteLine("ConnectionString before open: " + con.ConnectionString);
\r
2806 OracleCommand cmd = con.CreateCommand();
\r
2807 cmd.CommandText = "SELECT USER FROM DUAL";
\r
2808 OracleDataReader reader = cmd.ExecuteReader();
\r
2809 if (reader.Read())
\r
2810 Console.WriteLine("User: " + reader.GetString(reader.GetOrdinal("USER")));
\r
2812 Console.WriteLine("ConnectionString after close: " + con.ConnectionString);
\r
2814 catch (Exception e) {
\r
2815 Console.WriteLine("Exception caught: " + e.Message);
\r
2816 Console.WriteLine("Probably not setup for external authentication. This is fine.");
\r
2819 Console.WriteLine("ConnectionString after dispose: " + con.ConnectionString);
\r
2821 Console.WriteLine("\n\n");
\r
2824 public static void ConnectionPoolingTest1 ()
\r
2826 Console.WriteLine("Start Connection Pooling Test 1...");
\r
2827 OracleConnection[] connections = null;
\r
2828 int maxCon = MAX_CONNECTIONS + 1; // add 1 more over the max connections to cause it to wait for the next available connection
\r
2832 connections = new OracleConnection[maxCon];
\r
2834 for (i = 0; i < maxCon; i++) {
\r
2835 Console.WriteLine(" Open connection: {0}", i);
\r
2836 connections[i] = new OracleConnection(conStr);
\r
2837 connections[i].Open ();
\r
2839 } catch (InvalidOperationException e) {
\r
2840 Console.WriteLine("Expected exception InvalidOperationException caught.");
\r
2841 Console.WriteLine(e);
\r
2844 for (i = 0; i < maxCon; i++) {
\r
2845 if (connections[i] != null) {
\r
2846 Console.WriteLine(" Close connection: {0}", i);
\r
2847 if (connections[i].State == ConnectionState.Open)
\r
2848 connections[i].Close ();
\r
2849 connections[i].Dispose ();
\r
2850 connections[i] = null;
\r
2854 connections = null;
\r
2856 Console.WriteLine("Done Connection Pooling Test 1.");
\r
2859 public static void ConnectionPoolingTest2 ()
\r
2861 Console.WriteLine("Start Connection Pooling Test 2...");
\r
2862 OracleConnection[] connections = null;
\r
2863 int maxCon = MAX_CONNECTIONS;
\r
2866 connections = new OracleConnection[maxCon];
\r
2868 for (i = 0; i < maxCon; i++) {
\r
2869 Console.WriteLine(" Open connection: {0}", i);
\r
2870 connections[i] = new OracleConnection(conStr);
\r
2871 connections[i].Open ();
\r
2874 Console.WriteLine("Start another thread...");
\r
2875 t = new Thread(new ThreadStart(AnotherThreadProc));
\r
2878 Console.WriteLine("Sleep...");
\r
2879 Thread.Sleep(100);
\r
2881 Console.WriteLine("Closing...");
\r
2882 for (i = 0; i < maxCon; i++) {
\r
2883 if (connections[i] != null) {
\r
2884 Console.WriteLine(" Close connection: {0}", i);
\r
2885 if (connections[i].State == ConnectionState.Open)
\r
2886 connections[i].Close ();
\r
2887 connections[i].Dispose ();
\r
2888 connections[i] = null;
\r
2892 connections = null;
\r
2895 private static void AnotherThreadProc ()
\r
2897 Console.WriteLine("Open connection via another thread...");
\r
2898 OracleConnection[] connections = null;
\r
2899 int maxCon = MAX_CONNECTIONS;
\r
2902 connections = new OracleConnection[maxCon];
\r
2904 for (i = 0; i < maxCon; i++) {
\r
2905 Console.WriteLine(" Open connection: {0}", i);
\r
2906 connections[i] = new OracleConnection(conStr);
\r
2907 connections[i].Open ();
\r
2910 Console.WriteLine("Done Connection Pooling Test 2.");
\r
2911 System.Environment.Exit (0);
\r
2914 private static void SetParameterOracleType (OracleConnection con)
2916 Console.WriteLine();
2917 OracleParameter p = con.CreateCommand().CreateParameter();
2918 Console.WriteLine("p.OracleType [VarChar]: " + p.OracleType.ToString());
2919 p.OracleType = OracleType.Clob;
2920 Console.WriteLine("p.OracleType [Clob]: " + p.OracleType.ToString());
2921 p.Value = "SomeString";
2922 Console.WriteLine("p.OracleType [Clob]: " + p.OracleType.ToString());
2923 Console.WriteLine();
2925 OracleParameter p2 = con.CreateCommand().CreateParameter();
2926 Console.WriteLine("p2.OracleType [VarChar]: " + p2.OracleType.ToString());
2927 p2.Value = new byte[] { 0x01, 0x02, 0x03, 0x04 };
2928 Console.WriteLine("p2.OracleType [VarChar]: " + p2.OracleType.ToString());
2929 p2.OracleType = OracleType.Blob;
2930 Console.WriteLine("p2.OracleType [Blob]: " + p2.OracleType.ToString());
2931 Console.WriteLine();
2933 OracleParameter p3 = new OracleParameter("test", OracleType.Clob);
2934 Console.WriteLine("p3.OracleType [Clob]: " + p3.OracleType.ToString());
2936 Console.WriteLine("p3.OracleType [Clob]: " + p3.OracleType.ToString());
2937 Console.WriteLine();
2939 OracleParameter p4 = new OracleParameter("test", "blah");
2940 Console.WriteLine("p4.OracleType [VarChar]: " + p4.OracleType.ToString());
2941 p4.OracleType = OracleType.Clob;
2942 Console.WriteLine("p4.OracleType [Clob]: " + p4.OracleType.ToString());
2943 Console.WriteLine();
2945 OracleParameter p5 = new OracleParameter ((string) null, new DateTime (2005, 3, 8));
2946 Console.WriteLine("p5.OracleType [DateTime]: " + p5.OracleType.ToString());
2949 public static void InsertBlobTest(OracleConnection con)
2952 SetupMyPackage(con);
2956 public static void checkTNS()
2958 //string tnsAdmin = System.Environment.GetEnvironmentVariable("TNS_ADMIN");
2959 //if ( (tnsAdmin == null)|| (string.Empty.Equals(tnsAdmin)) )
2961 // System.Environment.SetEnvironmentVariable("TNS_ADMIN", "~/instantclient");
2965 public static decimal InsertBlob(OracleConnection con)
2967 byte[] ByteArray = new byte[2000]; // test Blob data
2969 for (int i = 0; i < ByteArray.Length; i++) {
2975 Console.WriteLine("Test Blob Data beginning: " + GetHexString (ByteArray));
2977 decimal retVal = -1;
2979 string sproc = "MyPackage" + ".InsertBlob";
2981 OracleCommand cmd = new OracleCommand();
2982 cmd.CommandText = sproc;
2983 cmd.CommandType = CommandType.StoredProcedure;
2984 cmd.Connection = con;
2985 //cmd.Connection.Open();
2986 cmd.Transaction = cmd.Connection.BeginTransaction();
2989 OracleParameter p1 = new OracleParameter("i_Sig_File", OracleType.Blob);
2990 p1.Direction = ParameterDirection.Input;
2992 //EXCEPTION thrown here
2993 //p1.Value = GetOracleLob(cmd.Transaction, ByteArray);
2994 OracleLob lob2 = GetOracleLob(cmd.Transaction, ByteArray);
2995 byte[] b2 = (byte[]) lob2.Value;
2996 Console.WriteLine("Test Blob Data here: " + GetHexString (b2));
2997 p1.Value = lob2.Value;
2998 //p1.Value = ByteArray;
3000 cmd.Parameters.Add(p1);
3002 cmd.ExecuteNonQuery();
3004 cmd.Transaction.Commit();
3006 OracleCommand select = con.CreateCommand ();
3007 //select.Transaction = transaction;
3008 select.CommandText = "SELECT BLOB_COLUMN FROM BLOBTEST2";
3009 Console.WriteLine (" SELECTING A BLOB (Binary) VALUE FROM BLOBTEST2");
3011 OracleDataReader reader = select.ExecuteReader ();
3012 if (!reader.Read ())
3013 Console.WriteLine ("ERROR: RECORD NOT FOUND");
3015 Console.WriteLine (" TESTING OracleLob OBJECT ...");
3016 if (reader.IsDBNull(0))
3017 Console.WriteLine("Lob IsNull");
3019 OracleLob lob = reader.GetOracleLob (0);
3020 if (lob == OracleLob.Null)
3021 Console.WriteLine("Lob is OracleLob.Null");
3023 byte[] blob = (byte[]) lob.Value;
3024 string result = GetHexString(blob);
3025 Console.WriteLine("Blob result: " + result);
3026 if (ByteArrayCompare (ByteArray, blob))
3027 Console.WriteLine("ByteArray and blob are the same: good");
3029 Console.WriteLine("ByteArray and blob are not the same: bad");
3033 catch(Exception ex) {
3034 Console.WriteLine("I exploded:" + ex.ToString());
3035 cmd.Transaction.Rollback();
3043 private static OracleLob GetOracleLob(OracleTransaction transaction, byte[] blob)
3045 string BLOB_CREATE = "DECLARE dpBlob BLOB; "
3047 + " DBMS_LOB.CREATETEMPORARY(dpBlob , False, 0); "
3048 + " :tempBlob := dpBlob; "
3051 OracleLob tempLob = OracleLob.Null;
3054 // Create a new command using the same connection
3055 OracleCommand command = transaction.Connection.CreateCommand();
3057 // Assign the transaction to the command
3058 command.Transaction = transaction;
3060 // Create blob storage on the Oracle server
3061 command.CommandText = BLOB_CREATE;
3063 // Add a new output paramter to accept the blob storage reference
3064 OracleParameter parm = new OracleParameter("tempBlob", OracleType.Blob);
3065 parm.Direction = ParameterDirection.Output;
3066 command.Parameters.Add(parm);
3067 // command.Parameters.Add(
3068 // new OracleParameter("tempBlob", OracleType.Blob)).Direction =
3069 // ParameterDirection.Output;
3071 // Fire as your guns bear...
3072 command.ExecuteNonQuery();
3074 // Retrieve the blob stream from the OracleLob parameter
3075 //tempLob = (OracleLob)command.Parameters[0].Value;
3076 tempLob = (OracleLob) parm.Value;
3078 // Prevent server side events from firing while we write to the stream
3079 tempLob.BeginBatch(OracleLobOpenMode.ReadWrite);
3081 // Write bytes to the stream
3082 tempLob.Write(blob, 0, blob.Length);
3084 // Resume firing server events
3091 static void SetupMyPackage(OracleConnection con)
\r
3093 Console.WriteLine("Setup Oracle package curspkg_join...");
\r
3095 Console.WriteLine (" Drop table BLOBTEST2 ...");
3097 OracleCommand cmd2 = con.CreateCommand ();
3098 //cmd2.Transaction = transaction;
3099 cmd2.CommandText = "DROP TABLE BLOBTEST2";
3100 cmd2.ExecuteNonQuery ();
3102 catch (OracleException) {
3103 // ignore if table already exists
3106 Console.WriteLine (" CREATE TABLE ...");
3108 OracleCommand create = con.CreateCommand ();
3109 //create.Transaction = transaction;
3110 create.CommandText = "CREATE TABLE BLOBTEST2 (BLOB_COLUMN BLOB)";
3111 create.ExecuteNonQuery ();
3113 create.CommandText = "commit";
\r
3114 create.ExecuteNonQuery();
\r
3116 Console.Error.WriteLine(" create or replace package MyPackage...");
3117 OracleCommand cmd = con.CreateCommand();
\r
3118 cmd.CommandText =
\r
3119 "CREATE OR REPLACE PACKAGE MyPackage AS\n" +
\r
3120 " Procedure InsertBlob (i_Sig_File blob);\n" +
\r
3122 cmd.ExecuteNonQuery();
3124 Console.Error.WriteLine(" create or replace package body MyPackage...");
3125 cmd.CommandText =
\r
3126 "CREATE OR REPLACE PACKAGE BODY MyPackage AS\n" +
\r
3127 " Procedure InsertBlob (i_Sig_File blob)\n" +
\r
3130 " INSERT INTO BLOBTEST2 (BLOB_COLUMN) VALUES(i_Sig_File); " +
3131 " END InsertBlob; " +
\r
3133 cmd.ExecuteNonQuery();
3135 cmd.CommandText = "commit";
\r
3136 cmd.ExecuteNonQuery();
\r
3139 static byte[] ByteArrayCombine (byte[] b1, byte[] b2)
3146 byte[] bytes = new byte[b1.Length + b2.Length];
3148 for (int j = 0; j < b1.Length; j++) {
3152 for (int k = 0; k < b2.Length; k++) {
3159 static bool ByteArrayCompare(byte[] ba1, byte[] ba2)
3161 if (ba1 == null && ba2 == null)
3170 if (ba1.Length != ba2.Length)
3173 // for (int i = 0; i < ba1.Length; i++)
3175 //Console.WriteLine("i: " + i.ToString() + " ba1: " + ba1[i].ToString() + " ba2: " + ba2[i].ToString());
3178 for (int i = 0; i < ba1.Length; i++)
3180 if (ba1[i] != ba2[i])
3188 static void Main(string[] args)
3190 if(args.Length != 3) {
3191 Console.WriteLine("Usage: mono TestOracleClient database userid password");
3195 string connectionString = String.Format(
3196 "Data Source={0};" +
3199 args[0], args[1], args[2]);
3201 conStr = connectionString;
3203 OracleConnection con1 = new OracleConnection();
3205 ShowConnectionProperties (con1);
3207 con1.ConnectionString = connectionString;
3209 con1.InfoMessage += new OracleInfoMessageEventHandler (OnInfoMessage);
3210 con1.StateChange += new StateChangeEventHandler (OnStateChange);
3212 Console.WriteLine("Opening...");
3214 Console.WriteLine("Opened.");
3216 ShowConnectionProperties (con1);
3218 InsertBlobTest (con1);
3220 Console.WriteLine ("Mono Oracle Test BEGIN ...");
3222 Console.WriteLine ("Mono Oracle Test END ...");
3226 Console.WriteLine ("LOB Test BEGIN...");
3229 Console.WriteLine ("LOB Test END.");
3232 Console.WriteLine ("Read Simple Test BEGIN - scott.emp...");
3233 ReadSimpleTest(con1, "SELECT e.*, e.rowid FROM scott.emp e");
3234 Console.WriteLine ("Read Simple Test END - scott.emp");
3238 Console.WriteLine ("DataAdapter Test BEGIN...");
3239 DataAdapterTest(con1);
3240 Console.WriteLine ("DataAdapter Test END.");
3244 Console.WriteLine ("DataAdapter Test 2 BEGIN...");
3245 // FIXME: test is failing in NET_2_0 profile but not in NET_1_1 profile
3246 // Unhandled Exception: System.Data.OracleClient.OracleException: ORA-01400: cannot insert NULL
3247 // into ("SCOTT"."MONO_ADAPTER_TEST"."NUMBER_WHOLE_VALUE")
3248 // NUMBER_WHOLE_VALUE is a primary key on the table.
3249 //DataAdapterTest2(con1);
3250 Console.WriteLine ("***DataAdapter Test 2 FAILS!");
3251 Console.WriteLine ("DataAdapter Test 2 END.");
3255 Console.WriteLine ("Rollback Test BEGIN...");
3257 Console.WriteLine ("Rollback Test END.");
3261 Console.WriteLine ("Commit Test BEGIN...");
3263 Console.WriteLine ("Commit Test END.");
3267 Console.WriteLine ("Parameter Test BEGIN...");
3268 ParameterTest(con1);
3269 ReadSimpleTest(con1, "SELECT * FROM MONO_TEST_TABLE7");
3270 Console.WriteLine ("Parameter Test END.");
3274 Console.WriteLine ("Stored Proc Test 1 BEGIN...");
3275 StoredProcedureTest1 (con1);
3276 ReadSimpleTest(con1, "SELECT * FROM MONO_TEST_TABLE1");
3277 Console.WriteLine ("Stored Proc Test 1 END...");
3281 Console.WriteLine ("Stored Proc Test 2 BEGIN...");
3282 StoredProcedureTest2 (con1);
3283 ReadSimpleTest(con1, "SELECT * FROM MONO_TEST_TABLE2");
3284 Console.WriteLine ("Stored Proc Test 2 END...");
3286 SetParameterOracleType (con1);
3288 Console.WriteLine ("Out Parameter and PL/SQL Block Test 1 BEGIN...");
3289 OutParmTest1 (con1);
3290 Console.WriteLine ("Out Parameter and PL/SQL Block Test 1 END...");
3292 Console.WriteLine ("Out Parameter and PL/SQL Block Test 2 BEGIN...");
3293 OutParmTest2 (con1);
3294 Console.WriteLine ("Out Parameter and PL/SQL Block Test 2 END...");
3296 Console.WriteLine ("Out Parameter and PL/SQL Block Test 3 BEGIN...");
3297 OutParmTest3 (con1);
3298 Console.WriteLine ("Out Parameter and PL/SQL Block Test 3 END...");
3300 Console.WriteLine ("Out Parameter and PL/SQL Block Test 4 BEGIN...");
3301 OutParmTest4 (con1);
3302 Console.WriteLine ("Out Parameter and PL/SQL Block Test 4 END...");
3304 Console.WriteLine ("Out Parameter and PL/SQL Block Test 5 BEGIN...");
3305 OutParmTest5 (con1);
3306 Console.WriteLine ("Out Parameter and PL/SQL Block Test 5 END...");
3308 Console.WriteLine ("Out Parameter and PL/SQL Block Test 6 BEGIN...");
3309 OutParmTest6 (con1);
3310 Console.WriteLine ("Out Parameter and PL/SQL Block Test 6 END...");
3314 Console.WriteLine ("Test a Non Query using Execute Reader BEGIN...");
3315 TestNonQueryUsingExecuteReader (con1);
3316 Console.WriteLine ("Test a Non Query using Execute Reader END...");
3320 Console.WriteLine ("Null Aggregate Warning BEGIN test...");
3321 NullAggregateTest (con1);
3322 Console.WriteLine ("Null Aggregate Warning END test...");
3324 Console.WriteLine ("Ref Cursor BEGIN tests...");
3325 RefCursorTests (con1);
3326 Console.WriteLine ("Ref Cursor END tests...");
3328 Console.WriteLine("Closing...");
3330 Console.WriteLine("Closed.");
3332 conStr = conStr + ";pooling=true;min pool size=4;max pool size=" + MAX_CONNECTIONS.ToString ();
\r
3333 ConnectionPoolingTest1 ();
\r ConnectionPoolingTest2 ();
\r
3335 // Need to have an external authentication user setup in Linux and oracle
3336 // before running this test
3337 //ExternalAuthenticationTest();
3339 TestPersistSucurityInfo1();
\r
3340 TestPersistSucurityInfo2();
\r
3341 TestPersistSucurityInfo3();
\r
3342 TestPersistSucurityInfo4();
\r
3343 TestPersistSucurityInfo5();
\r
3344 TestPersistSucurityInfo6();
3346 Console.WriteLine("Done.");