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 <danielmorgan@verizon.net>
20 // Copyright (C) Daniel Morgan, 2002, 2004-2005
25 using System.Runtime.InteropServices;
27 using System.Data.OracleClient;
30 namespace Test.OracleClient
32 public class OracleTest
39 static void MonoTest(OracleConnection con)
41 Console.WriteLine (" Drop table MONO_ORACLE_TEST ...");
43 OracleCommand cmd2 = con.CreateCommand ();
44 cmd2.CommandText = "DROP TABLE MONO_ORACLE_TEST";
45 cmd2.ExecuteNonQuery ();
47 catch (OracleException oe1) {
48 // ignore if table already exists
51 OracleCommand cmd = null;
54 Console.WriteLine(" Creating table MONO_ORACLE_TEST...");
55 cmd = new OracleCommand();
57 cmd.CommandText = "CREATE TABLE MONO_ORACLE_TEST ( " +
58 " varchar2_value VarChar2(32), " +
59 " number_whole_value Number(18), " +
60 " number_scaled_value Number(18,2), " +
61 " number_integer_value Integer, " +
62 " float_value Float, " +
63 " date_value Date, " +
64 " char_value Char(32), " +
65 " clob_value Clob, " +
66 " blob_value Blob, " +
67 " clob_empty_value Clob, " +
68 " blob_empty_value Blob, " +
69 " varchar2_null_value VarChar2(32), " +
70 " number_whole_null_value Number(18), " +
71 " number_scaled_null_value Number(18,2), " +
72 " number_integer_null_value Integer, " +
73 " float_null_value Float, " +
74 " date_null_value Date, " +
75 " char_null_value Char(32), " +
76 " clob_null_value Clob, " +
77 " blob_null_value Blob " +
80 rowsAffected = cmd.ExecuteNonQuery();
82 Console.WriteLine(" Begin Trans for table MONO_ORACLE_TEST...");
83 OracleTransaction trans = con.BeginTransaction ();
85 Console.WriteLine(" Inserting value into MONO_ORACLE_TEST...");
86 cmd = new OracleCommand();
88 cmd.Transaction = trans;
89 cmd.CommandText = "INSERT INTO mono_oracle_test " +
90 " ( varchar2_value, " +
91 " number_whole_value, " +
92 " number_scaled_value, " +
93 " number_integer_value, " +
99 " clob_empty_value, " +
100 " blob_empty_value " +
108 " TO_DATE( '2004-12-31', 'YYYY-MM-DD' ), " +
116 rowsAffected = cmd.ExecuteNonQuery();
118 Console.WriteLine(" Select/Update CLOB columns on table MONO_ORACLE_TEST...");
120 // update BLOB and CLOB columns
121 OracleCommand select = con.CreateCommand ();
122 select.Transaction = trans;
123 select.CommandText = "SELECT CLOB_VALUE, BLOB_VALUE FROM MONO_ORACLE_TEST FOR UPDATE";
124 OracleDataReader reader = select.ExecuteReader ();
126 Console.WriteLine ("ERROR: RECORD NOT FOUND");
128 Console.WriteLine(" Update CLOB column on table MONO_ORACLE_TEST...");
129 OracleLob clob = reader.GetOracleLob (0);
131 UnicodeEncoding encoding = new UnicodeEncoding ();
132 bytes = encoding.GetBytes ("Mono is fun!");
133 clob.Write (bytes, 0, bytes.Length);
136 Console.WriteLine(" Update BLOB column on table MONO_ORACLE_TEST...");
137 OracleLob blob = reader.GetOracleLob (1);
138 bytes = new byte[6] { 0x31, 0x32, 0x33, 0x34, 0x35, 0x036 };
139 blob.Write (bytes, 0, bytes.Length);
142 Console.WriteLine(" Commit trans for table MONO_ORACLE_TEST...");
145 // OracleCommand.ExecuteReader of MONO_ORACLE_TEST table
146 Console.WriteLine(" Read simple test for table MONO_ORACLE_TEST...");
147 ReadSimpleTest(con, "SELECT * FROM MONO_ORACLE_TEST");
149 // OracleCommand.ExecuteScalar
150 Console.WriteLine(" -ExecuteScalar tests...");
151 string varchar2_value = (string) ReadScalar (con,"SELECT MAX(varchar2_value) FROM MONO_ORACLE_TEST");
152 Console.WriteLine(" String Value: " + varchar2_value);
154 Console.WriteLine(" Read Scalar: number_whole_value");
155 decimal number_whole_value = (decimal)
156 ReadScalar (con,"SELECT MAX(number_whole_value) FROM MONO_ORACLE_TEST");
157 Console.WriteLine(" Int32 Value: " + number_whole_value.ToString());
159 Console.WriteLine(" Read Scalar: number_scaled_value");
160 decimal number_scaled_value = (decimal)
161 ReadScalar (con,"SELECT number_scaled_value FROM MONO_ORACLE_TEST");
162 Console.WriteLine(" Decimal Value: " + number_scaled_value.ToString());
164 Console.WriteLine(" Read Scalar: date_value");
165 DateTime date_value = (DateTime)
166 ReadScalar (con,"SELECT date_value FROM MONO_ORACLE_TEST");
167 Console.WriteLine(" DateTime Value: " + date_value.ToString());
169 Console.WriteLine(" Read Scalar: clob_value");
170 string clob_value = (string)
171 ReadScalar (con,"SELECT clob_value FROM MONO_ORACLE_TEST");
172 Console.WriteLine(" CLOB Value: " + clob_value);
174 Console.WriteLine(" Read Scalar: blob_value");
175 byte[] blob_value = (byte[])
176 ReadScalar (con,"SELECT blob_value FROM MONO_ORACLE_TEST");
177 string sblob_value = GetHexString (blob_value);
178 Console.WriteLine(" BLOB Value: " + sblob_value);
180 // OracleCommand.ExecuteOracleScalar
181 Console.WriteLine(" -ExecuteOracleScalar tests...");
182 Console.WriteLine(" Read Oracle Scalar: varchar2_value");
183 ReadOracleScalar (con,"SELECT MAX(varchar2_value) FROM MONO_ORACLE_TEST");
185 Console.WriteLine(" Read Oracle Scalar: number_whole_value");
186 ReadOracleScalar (con,"SELECT MAX(number_whole_value) FROM MONO_ORACLE_TEST");
188 Console.WriteLine(" Read Oracle Scalar: number_scaled_value");
189 ReadOracleScalar (con,"SELECT number_scaled_value FROM MONO_ORACLE_TEST");
191 Console.WriteLine(" Read Oracle Scalar: date_value");
192 ReadOracleScalar (con,"SELECT date_value FROM MONO_ORACLE_TEST");
194 Console.WriteLine(" Read Oracle Scalar: clob_value");
195 ReadOracleScalar (con,"SELECT clob_value FROM MONO_ORACLE_TEST");
197 Console.WriteLine(" Read Oracle Scalar: blob_value");
198 ReadOracleScalar (con,"SELECT blob_value FROM MONO_ORACLE_TEST");
201 static object ReadScalar (OracleConnection con, string selectSql)
203 OracleCommand cmd = null;
204 cmd = con.CreateCommand();
205 cmd.CommandText = selectSql;
207 object o = cmd.ExecuteScalar ();
209 string dataType = o.GetType ().ToString ();
210 Console.WriteLine (" DataType: " + dataType);
214 static void ReadOracleScalar (OracleConnection con, string selectSql)
216 OracleCommand cmd = null;
217 cmd = con.CreateCommand();
218 cmd.CommandText = selectSql;
220 object o = cmd.ExecuteOracleScalar ();
222 string dataType = o.GetType ().ToString ();
223 Console.WriteLine (" DataType: " + dataType);
224 if (dataType.Equals("System.Data.OracleClient.OracleLob"))
225 o = ((OracleLob) o).Value;
226 if (o.GetType ().ToString ().Equals ("System.Byte[]"))
227 o = GetHexString ((byte[])o);
229 Console.WriteLine (" Value: " + o.ToString ());
232 static void ReadSimpleTest(OracleConnection con, string selectSql)
234 OracleCommand cmd = null;
235 OracleDataReader reader = null;
237 cmd = con.CreateCommand();
238 cmd.CommandText = selectSql;
239 reader = cmd.ExecuteReader();
241 Console.WriteLine(" Results...");
242 Console.WriteLine(" Schema");
244 table = reader.GetSchemaTable();
245 for(int c = 0; c < reader.FieldCount; c++) {
246 Console.WriteLine(" Column " + c.ToString());
247 DataRow row = table.Rows[c];
249 string strColumnName = row["ColumnName"].ToString();
250 string strBaseColumnName = row["BaseColumnName"].ToString();
251 string strColumnSize = row["ColumnSize"].ToString();
252 string strNumericScale = row["NumericScale"].ToString();
253 string strNumericPrecision = row["NumericPrecision"].ToString();
254 string strDataType = row["DataType"].ToString();
256 Console.WriteLine(" ColumnName: " + strColumnName);
257 Console.WriteLine(" BaseColumnName: " + strBaseColumnName);
258 Console.WriteLine(" ColumnSize: " + strColumnSize);
259 Console.WriteLine(" NumericScale: " + strNumericScale);
260 Console.WriteLine(" NumericPrecision: " + strNumericPrecision);
261 Console.WriteLine(" DataType: " + strDataType);
265 Console.WriteLine (" Data");
266 while (reader.Read ()) {
268 Console.WriteLine (" Row: " + r.ToString ());
269 for (int f = 0; f < reader.FieldCount; f++) {
273 string sDataType = "";
274 string sFieldType = "";
275 string sDataTypeName = "";
276 string sOraDataType = "";
278 sname = reader.GetName (f);
280 if (reader.IsDBNull (f)) {
281 ovalue = DBNull.Value;
283 sDataType = "DBNull.Value";
284 sOraDataType = "DBNull.Value";
287 ovalue = reader.GetOracleValue (f);
288 object oravalue = null;
290 sDataType = ovalue.GetType ().ToString ();
292 case "System.Data.OracleClient.OracleString":
293 oravalue = ((OracleString) ovalue).Value;
295 case "System.Data.OracleClient.OracleNumber":
296 oravalue = ((OracleNumber) ovalue).Value;
298 case "System.Data.OracleClient.OracleLob":
299 OracleLob lob = (OracleLob) ovalue;
300 oravalue = lob.Value;
303 case "System.Data.OracleClient.OracleDateTime":
304 oravalue = ((OracleDateTime) ovalue).Value;
307 oravalue = "*** no test available ***";
311 sOraDataType = oravalue.GetType ().ToString ();
312 if (sOraDataType.Equals ("System.Byte[]"))
313 svalue = GetHexString ((byte[]) oravalue);
315 svalue = oravalue.ToString();
318 sFieldType = reader.GetFieldType(f).ToString();
319 sDataTypeName = reader.GetDataTypeName(f);
321 Console.WriteLine(" Field: " + f.ToString());
322 Console.WriteLine(" Name: " + sname);
323 Console.WriteLine(" Value: " + svalue);
324 Console.WriteLine(" Oracle Data Type: " + sOraDataType);
325 Console.WriteLine(" Data Type: " + sDataType);
326 Console.WriteLine(" Field Type: " + sFieldType);
327 Console.WriteLine(" Data Type Name: " + sDataTypeName);
331 Console.WriteLine(" No data returned.");
334 static void DataAdapterTest (OracleConnection connection)
336 Console.WriteLine(" Create select command...");
337 OracleCommand command = connection.CreateCommand ();
338 command.CommandText = "SELECT * FROM EMP";
340 Console.WriteLine(" Create data adapter...");
341 OracleDataAdapter adapter = new OracleDataAdapter (command);
343 Console.WriteLine(" Create DataSet...");
344 DataSet dataSet = new DataSet ("EMP");
346 Console.WriteLine(" Fill DataSet via data adapter...");
347 adapter.Fill (dataSet);
349 Console.WriteLine(" Get DataTable...");
350 DataTable table = dataSet.Tables [0];
352 Console.WriteLine(" Display each row...");
354 foreach (DataRow row in table.Rows) {
355 Console.WriteLine (" row {0}", rowCount + 1);
356 for (int i = 0; i < table.Columns.Count; i += 1) {
357 Console.WriteLine (" {0}: {1}", table.Columns [i].ColumnName, row [i]);
359 Console.WriteLine ();
364 static void RollbackTest (OracleConnection connection)
366 OracleTransaction transaction = connection.BeginTransaction ();
368 OracleCommand insert = connection.CreateCommand ();
369 insert.Transaction = transaction;
370 insert.CommandText = "INSERT INTO EMP (EMPNO, ENAME, JOB) VALUES (8787, 'T Coleman', 'Monoist')";
372 Console.WriteLine (" Inserting record ...");
374 insert.ExecuteNonQuery ();
376 OracleCommand select = connection.CreateCommand ();
377 select.CommandText = "SELECT COUNT(*) FROM EMP WHERE EMPNO = 8787";
378 select.Transaction = transaction;
379 OracleDataReader reader = select.ExecuteReader ();
382 Console.WriteLine (" Row count SHOULD BE 1, VALUE IS {0}", reader.GetValue (0));
385 Console.WriteLine (" Rolling back transaction ...");
387 transaction.Rollback ();
389 select = connection.CreateCommand ();
390 select.CommandText = "SELECT COUNT(*) FROM EMP WHERE EMPNO = 8787";
392 reader = select.ExecuteReader ();
394 Console.WriteLine (" Row count SHOULD BE 0, VALUE IS {0}", reader.GetValue (0));
398 static void CommitTest (OracleConnection connection)
400 OracleTransaction transaction = connection.BeginTransaction ();
402 OracleCommand insert = connection.CreateCommand ();
403 insert.Transaction = transaction;
404 insert.CommandText = "INSERT INTO EMP (EMPNO, ENAME, JOB) VALUES (8787, 'T Coleman', 'Monoist')";
406 Console.WriteLine (" Inserting record ...");
408 insert.ExecuteNonQuery ();
410 OracleCommand select = connection.CreateCommand ();
411 select.CommandText = "SELECT COUNT(*) FROM EMP WHERE EMPNO = 8787";
412 select.Transaction = transaction;
414 Console.WriteLine (" Row count SHOULD BE 1, VALUE IS {0}", select.ExecuteScalar ());
416 Console.WriteLine (" Committing transaction ...");
418 transaction.Commit ();
420 select = connection.CreateCommand ();
421 select.CommandText = "SELECT COUNT(*) FROM EMP WHERE EMPNO = 8787";
423 Console.WriteLine ("Row count SHOULD BE 1, VALUE IS {0}", select.ExecuteScalar ());
424 transaction = connection.BeginTransaction ();
425 OracleCommand delete = connection.CreateCommand ();
426 delete.Transaction = transaction;
427 delete.CommandText = "DELETE FROM EMP WHERE EMPNO = 8787";
428 delete.ExecuteNonQuery ();
429 transaction.Commit ();
432 public static void ParameterTest (OracleConnection connection)
434 OracleTransaction transaction = connection.BeginTransaction ();
435 OracleCommand insert = connection.CreateCommand ();
436 insert.Transaction = transaction;
438 insert.CommandText = "INSERT INTO EMP (EMPNO, ENAME, JOB) VALUES (:P1, :P2, :P3)";
439 insert.Parameters.Add (":P1", 8888);
440 insert.Parameters.Add (":P2", "danmorg");
441 insert.Parameters.Add (":P3", "Monoist");
443 Console.WriteLine (" INSERTING DATA WITH PARAMETERS...");
444 Console.WriteLine (" " + insert.CommandText);
446 insert.ExecuteNonQuery ();
448 OracleCommand select = connection.CreateCommand ();
449 select.Transaction = transaction;
451 select.CommandText = "SELECT ENAME, JOB FROM EMP WHERE EMPNO=:P1";
452 select.Parameters.Add (":P1", 8888);
454 Console.WriteLine (" VERIFYING RESULTS ...");
456 OracleDataReader reader = select.ExecuteReader ();
458 Console.WriteLine ("ERROR: RECORD NOT FOUND");
460 Console.WriteLine (" ENAME - SHOULD BE danmorg, is {0}", reader.GetValue (0));
461 Console.WriteLine (" JOB - SHOULD BE Monoist, is {0}", reader.GetValue (1));
465 Console.WriteLine (" ROLLBACK TRANSACTION...");
467 transaction.Rollback ();
470 public static void CLOBTest (OracleConnection connection)
472 Console.WriteLine (" BEGIN TRANSACTION ...");
474 OracleTransaction transaction = connection.BeginTransaction ();
476 Console.WriteLine (" Drop table CLOBTEST ...");
478 OracleCommand cmd2 = connection.CreateCommand ();
479 cmd2.Transaction = transaction;
480 cmd2.CommandText = "DROP TABLE CLOBTEST";
481 cmd2.ExecuteNonQuery ();
483 catch (OracleException oe1) {
484 // ignore if table already exists
487 Console.WriteLine (" CREATE TABLE ...");
489 OracleCommand create = connection.CreateCommand ();
490 create.Transaction = transaction;
491 create.CommandText = "CREATE TABLE CLOBTEST (CLOB_COLUMN CLOB)";
492 create.ExecuteNonQuery ();
494 Console.WriteLine (" INSERT RECORD ...");
496 OracleCommand insert = connection.CreateCommand ();
497 insert.Transaction = transaction;
498 insert.CommandText = "INSERT INTO CLOBTEST VALUES (EMPTY_CLOB())";
499 insert.ExecuteNonQuery ();
501 OracleCommand select = connection.CreateCommand ();
502 select.Transaction = transaction;
503 select.CommandText = "SELECT CLOB_COLUMN FROM CLOBTEST FOR UPDATE";
504 Console.WriteLine (" SELECTING A CLOB (CHARACTER) VALUE FROM CLOBTEST");
506 OracleDataReader reader = select.ExecuteReader ();
508 Console.WriteLine ("ERROR: RECORD NOT FOUND");
510 Console.WriteLine (" TESTING OracleLob OBJECT ...");
511 OracleLob lob = reader.GetOracleLob (0);
512 Console.WriteLine (" LENGTH: {0}", lob.Length);
513 Console.WriteLine (" CHUNK SIZE: {0}", lob.ChunkSize);
515 UnicodeEncoding encoding = new UnicodeEncoding ();
517 byte[] value = new byte [lob.Length * 2];
519 Console.WriteLine (" CURRENT POSITION: {0}", lob.Position);
520 Console.WriteLine (" UPDATING VALUE TO 'TEST ME!'");
521 value = encoding.GetBytes ("TEST ME!");
522 lob.Write (value, 0, value.Length);
524 Console.WriteLine (" CURRENT POSITION: {0}", lob.Position);
525 Console.WriteLine (" RE-READ VALUE...");
526 lob.Seek (1, SeekOrigin.Begin);
528 Console.WriteLine (" CURRENT POSITION: {0}", lob.Position);
529 value = new byte [lob.Length * 2];
530 lob.Read (value, 0, value.Length);
531 Console.WriteLine (" VALUE: {0}", encoding.GetString (value));
532 Console.WriteLine (" CURRENT POSITION: {0}", lob.Position);
534 Console.WriteLine (" CLOSE OracleLob...");
537 Console.WriteLine (" CLOSING READER...");
540 transaction.Commit ();
543 public static void BLOBTest (OracleConnection connection)
545 Console.WriteLine (" BEGIN TRANSACTION ...");
547 OracleTransaction transaction = connection.BeginTransaction ();
549 Console.WriteLine (" Drop table BLOBTEST ...");
551 OracleCommand cmd2 = connection.CreateCommand ();
552 cmd2.Transaction = transaction;
553 cmd2.CommandText = "DROP TABLE BLOBTEST";
554 cmd2.ExecuteNonQuery ();
556 catch (OracleException oe1) {
557 // ignore if table already exists
560 Console.WriteLine (" CREATE TABLE ...");
562 OracleCommand create = connection.CreateCommand ();
563 create.Transaction = transaction;
564 create.CommandText = "CREATE TABLE BLOBTEST (BLOB_COLUMN BLOB)";
565 create.ExecuteNonQuery ();
567 Console.WriteLine (" INSERT RECORD ...");
569 OracleCommand insert = connection.CreateCommand ();
570 insert.Transaction = transaction;
571 insert.CommandText = "INSERT INTO BLOBTEST VALUES (EMPTY_BLOB())";
572 insert.ExecuteNonQuery ();
574 OracleCommand select = connection.CreateCommand ();
575 select.Transaction = transaction;
576 select.CommandText = "SELECT BLOB_COLUMN FROM BLOBTEST FOR UPDATE";
577 Console.WriteLine (" SELECTING A BLOB (Binary) VALUE FROM BLOBTEST");
579 OracleDataReader reader = select.ExecuteReader ();
581 Console.WriteLine ("ERROR: RECORD NOT FOUND");
583 Console.WriteLine (" TESTING OracleLob OBJECT ...");
584 OracleLob lob = reader.GetOracleLob (0);
589 Console.WriteLine (" UPDATING VALUE");
591 byte[] bytes = new byte[6];
599 lob.Write (bytes, 0, bytes.Length);
601 Console.WriteLine (" CURRENT POSITION: {0}", lob.Position);
602 Console.WriteLine (" RE-READ VALUE...");
603 lob.Seek (1, SeekOrigin.Begin);
605 Console.WriteLine (" CURRENT POSITION: {0}", lob.Position);
606 value = new byte [lob.Length];
607 lob.Read (value, 0, value.Length);
610 if (value.GetType ().ToString ().Equals ("System.Byte[]"))
611 bvalue = GetHexString (value);
612 Console.WriteLine (" Bytes: " + bvalue);
614 Console.WriteLine (" CURRENT POSITION: {0}", lob.Position);
616 Console.WriteLine (" CLOSE OracleLob...");
619 Console.WriteLine (" CLOSING READER...");
622 transaction.Commit ();
625 static void Wait(string msg)
627 Console.WriteLine(msg);
629 Console.WriteLine("Waiting... Press Enter to continue...");
630 string nothing = Console.ReadLine();
633 // use this function to read a byte array into a string
634 // for easy display of binary data, such as, a BLOB value
635 public static string GetHexString (byte[] bytes)
639 StringBuilder sb2 = new StringBuilder();
640 for (int z = 0; z < bytes.Length; z++) {
642 sb2.Append (byt.ToString("x"));
645 bvalue = "0x" + sb2.ToString ();
650 static void StoredProcedureTest1 (OracleConnection con)
652 // test stored procedure with no parameters
655 OracleCommand cmd2 = con.CreateCommand ();
657 Console.WriteLine(" Drop table MONO_TEST_TABLE1...");
659 cmd2.CommandText = "DROP TABLE MONO_TEST_TABLE1";
660 cmd2.ExecuteNonQuery ();
662 catch(OracleException oe1) {
663 // ignore if table did not exist
666 Console.WriteLine(" Drop procedure SP_TEST1...");
668 cmd2.CommandText = "DROP PROCEDURE SP_TEST1";
669 cmd2.ExecuteNonQuery ();
671 catch(OracleException oe1) {
672 // ignore if procedure did not exist
675 Console.WriteLine(" Create table MONO_TEST_TABLE1...");
676 cmd2.CommandText = "CREATE TABLE MONO_TEST_TABLE1 (" +
677 " COL1 VARCHAR2(8), "+
678 " COL2 VARCHAR2(32))";
679 cmd2.ExecuteNonQuery ();
681 Console.WriteLine(" Create stored procedure SP_TEST1...");
682 cmd2.CommandText = "CREATE PROCEDURE SP_TEST1 " +
685 " INSERT INTO MONO_TEST_TABLE1 (COL1,COL2) VALUES ('aaa','bbbb');" +
688 cmd2.ExecuteNonQuery ();
690 Console.WriteLine("COMMIT...");
691 cmd2.CommandText = "COMMIT";
692 cmd2.ExecuteNonQuery ();
694 Console.WriteLine(" Call stored procedure sp_test1...");
695 OracleCommand cmd3 = con.CreateCommand ();
\r
696 cmd3.CommandType = CommandType.StoredProcedure;
\r
697 cmd3.CommandText = "sp_test1";
\r
698 cmd3.ExecuteNonQuery ();
701 static void StoredProcedureTest2 (OracleConnection con)
703 // test stored procedure with 2 parameters
705 Console.WriteLine(" Drop table MONO_TEST_TABLE2...");
706 OracleCommand cmd2 = con.CreateCommand ();
709 cmd2.CommandText = "DROP TABLE MONO_TEST_TABLE2";
710 cmd2.ExecuteNonQuery ();
712 catch(OracleException oe1) {
713 // ignore if table already exists
716 Console.WriteLine(" Drop procedure SP_TEST2...");
718 cmd2.CommandText = "DROP PROCEDURE SP_TEST2";
719 cmd2.ExecuteNonQuery ();
721 catch(OracleException oe1) {
722 // ignore if table already exists
725 Console.WriteLine(" Create table MONO_TEST_TABLE2...");
727 cmd2.CommandText = "CREATE TABLE MONO_TEST_TABLE2 (" +
728 " COL1 VARCHAR2(8), "+
729 " COL2 VARCHAR2(32))";
730 cmd2.ExecuteNonQuery ();
732 Console.WriteLine(" Create stored procedure SP_TEST2...");
733 cmd2.CommandText = "CREATE PROCEDURE SP_TEST2(parm1 VARCHAR2,parm2 VARCHAR2) " +
736 " INSERT INTO MONO_TEST_TABLE2 (COL1,COL2) VALUES (parm1,parm2);" +
739 cmd2.ExecuteNonQuery ();
741 Console.WriteLine(" COMMIT...");
742 cmd2.CommandText = "COMMIT";
743 cmd2.ExecuteNonQuery ();
745 Console.WriteLine(" Call stored procedure SP_TEST2 with two parameters...");
746 OracleCommand cmd3 = con.CreateCommand ();
\r
747 cmd3.CommandType = CommandType.StoredProcedure;
\r
748 cmd3.CommandText = "sp_test2";
\r
750 OracleParameter myParameter1 = new OracleParameter("parm1", OracleType.VarChar);
\r
751 myParameter1.Value = "yyy13";
\r
752 myParameter1.Size = 8;
\r
753 myParameter1.Direction = ParameterDirection.Input;
\r
755 OracleParameter myParameter2 = new OracleParameter("parm2", OracleType.VarChar);
\r
756 myParameter2.Value = "iii13";
\r
757 myParameter2.Size = 32;
\r
758 myParameter2.Direction = ParameterDirection.Input;
\r
760 cmd3.Parameters.Add (myParameter1);
\r
761 cmd3.Parameters.Add (myParameter2);
\r
763 cmd3.ExecuteNonQuery ();
766 static void ShowConnectionProperties (OracleConnection con)
768 IDbConnection dbcon = (IDbConnection) con;
771 Console.WriteLine ("ServerVersion: " + con.ServerVersion);
772 } catch (System.InvalidOperationException ioe) {
\r
773 Console.WriteLine ("InvalidOperationException caught.");
\r
774 Console.WriteLine ("Message: " + ioe.Message);
\r
777 Console.WriteLine ("DataSource: " + con.DataSource);
780 static void NullAggregateTest (OracleConnection con)
782 Console.WriteLine(" Drop table MONO_TEST_TABLE3...");
783 OracleCommand cmd2 = con.CreateCommand ();
786 cmd2.CommandText = "DROP TABLE MONO_TEST_TABLE3";
787 cmd2.ExecuteNonQuery ();
789 catch(OracleException oe1) {
790 // ignore if table already exists
793 Console.WriteLine(" Create table MONO_TEST_TABLE3...");
795 cmd2.CommandText = "CREATE TABLE MONO_TEST_TABLE3 (" +
796 " COL1 VARCHAR2(8), "+
797 " COL2 VARCHAR2(32))";
799 cmd2.ExecuteNonQuery ();
801 Console.WriteLine(" Insert some rows into table MONO_TEST_TABLE3...");
802 cmd2.CommandText = "INSERT INTO MONO_TEST_TABLE3 (COL1, COL2) VALUES ('1','one')";
803 cmd2.ExecuteNonQuery ();
805 cmd2.CommandText = "INSERT INTO MONO_TEST_TABLE3 (COL1, COL2) VALUES ('1','uno')";
806 cmd2.ExecuteNonQuery ();
808 cmd2.CommandText = "INSERT INTO MONO_TEST_TABLE3 (COL1, COL2) VALUES ('3','three')";
809 cmd2.ExecuteNonQuery ();
811 cmd2.CommandText = "INSERT INTO MONO_TEST_TABLE3 (COL1, COL2) VALUES ('3', null)";
812 cmd2.ExecuteNonQuery ();
814 cmd2.CommandText = "INSERT INTO MONO_TEST_TABLE3 (COL1, COL2) VALUES ('3','few')";
815 cmd2.ExecuteNonQuery ();
817 Console.WriteLine(" ExecuteScalar...");
818 cmd2.CommandText = "SELECT COL1, COUNT(COL2) AS MAX_COL1 FROM MONO_TEST_TABLE3 GROUP BY COL1";
819 OracleDataReader reader = cmd2.ExecuteReader ();
820 Console.WriteLine (" Read...");
821 while (reader.Read ()) {
823 object obj0 = reader.GetValue (0);
824 Console.WriteLine("Value 0: " + obj0.ToString ());
825 object obj1 = reader.GetValue (1);
826 Console.WriteLine("Value 1: " + obj1.ToString ());
828 Console.WriteLine (" Read...");
831 Console.WriteLine (" No more records.");
834 static void OnInfoMessage (object sender, OracleInfoMessageEventArgs e)
\r
836 Console.WriteLine("InfoMessage Message: " + e.Message.ToString());
\r
837 Console.WriteLine("InfoMessage Code: " + e.Code.ToString());
\r
838 Console.WriteLine("InfoMessage Source: " + e.Source.ToString());
\r
841 static void OnStateChange (object sender, StateChangeEventArgs e)
\r
843 Console.WriteLine("StateChange CurrentSate:" + e.CurrentState.ToString ());
\r
844 Console.WriteLine("StateChange OriginalState:" + e.OriginalState.ToString ());
\r
848 static void Main(string[] args)
850 args = new string[3] { "palis", "scott", "tiger" };
852 if(args.Length != 3) {
853 Console.WriteLine("Usage: mono TestOracleClient database userid password");
857 string connectionString = String.Format(
861 args[0], args[1], args[2]);
863 OracleConnection con1 = new OracleConnection();
865 ShowConnectionProperties (con1);
867 con1.ConnectionString = connectionString;
869 con1.InfoMessage += new OracleInfoMessageEventHandler (OnInfoMessage);
870 con1.StateChange += new StateChangeEventHandler (OnStateChange);
871 Console.WriteLine("Opening...");
873 Console.WriteLine("Opened.");
875 ShowConnectionProperties (con1);
877 Console.WriteLine ("Mono Oracle Test BEGIN ...");
879 Console.WriteLine ("Mono Oracle Test END ...");
883 Console.WriteLine ("LOB Test BEGIN...");
886 Console.WriteLine ("LOB Test END.");
889 Console.WriteLine ("Read Simple Test BEGIN - scott.emp...");
890 ReadSimpleTest(con1, "SELECT e.*, e.rowid FROM scott.emp e");
891 Console.WriteLine ("Read Simple Test END - scott.emp");
895 Console.WriteLine ("DataAdapter Test BEGIN...");
896 DataAdapterTest(con1);
897 Console.WriteLine ("DataAdapter Test END.");
901 Console.WriteLine ("Rollback Test BEGIN...");
903 Console.WriteLine ("Rollback Test END.");
907 Console.WriteLine ("Commit Test BEGIN...");
909 Console.WriteLine ("Commit Test END.");
913 Console.WriteLine ("Parameter Test BEGIN...");
915 Console.WriteLine ("Parameter Test END.");
919 Console.WriteLine ("Stored Proc Test 1 BEGIN...");
920 StoredProcedureTest1 (con1);
921 ReadSimpleTest(con1, "SELECT * FROM MONO_TEST_TABLE1");
922 Console.WriteLine ("Stored Proc Test 1 END...");
926 Console.WriteLine ("Stored Proc Test 2 BEGIN...");
927 StoredProcedureTest2 (con1);
928 ReadSimpleTest(con1, "SELECT * FROM MONO_TEST_TABLE2");
929 Console.WriteLine ("Stored Proc Test 2 END...");
933 Console.WriteLine ("Null Aggregate Warning BEGIN test...");
934 NullAggregateTest (con1);
935 Console.WriteLine ("Null Aggregate Warning END test...");
937 Console.WriteLine("Closing...");
939 Console.WriteLine("Closed.");
941 Console.WriteLine("Done.");