3 using System.Data.OracleClient;
7 public static void Main (string[] args)
9 string connectionString =
10 "Data Source=testdb;" +
13 OracleConnection connection = null;
14 connection = new OracleConnection (connectionString);
17 Console.WriteLine("Setup test package and data...");
18 OracleCommand cmddrop = connection.CreateCommand();
20 cmddrop.CommandText = "DROP TABLE TESTTABLE";
22 cmddrop.ExecuteNonQuery();
24 catch(OracleException e) {
25 Console.WriteLine("Ignore this error: " + e.Message);
30 Console.WriteLine("Create table TESTTABLE...");
31 OracleCommand cmd = connection.CreateCommand();
33 // create table TESTTABLE
35 "create table TESTTABLE (\n" +
36 " col1 numeric(18,0),\n" +
37 " col2 varchar(32),\n" +
38 " col3 date, col4 blob)";
40 cmd.ExecuteNonQuery();
41 Console.WriteLine("Insert 3 rows...");
42 // insert some rows into TESTTABLE
44 "insert into TESTTABLE\n" +
45 "(col1, col2, col3, col4)\n" +
46 "values(45, 'Mono', sysdate, EMPTY_BLOB())";
47 cmd.ExecuteNonQuery();
50 "insert into TESTTABLE\n" +
51 "(col1, col2, col3, col4)\n" +
52 "values(136, 'Fun', sysdate, EMPTY_BLOB())";
53 cmd.ExecuteNonQuery();
56 "insert into TESTTABLE\n" +
57 "(col1, col2, col3, col4)\n" +
58 "values(526, 'System.Data.OracleClient', sysdate, EMPTY_BLOB())";
59 cmd.ExecuteNonQuery();
61 Console.WriteLine("commit...");
63 cmd.CommandText = "commit";
64 cmd.ExecuteNonQuery();
66 Console.WriteLine("Update blob...");
68 // update BLOB and CLOB columns
69 OracleCommand select = connection.CreateCommand ();
70 select.Transaction = connection.BeginTransaction();
71 select.CommandText = "SELECT col1, col4 FROM testtable FOR UPDATE";
72 OracleDataReader readerz = select.ExecuteReader ();
74 Console.WriteLine ("ERROR: RECORD NOT FOUND");
76 Console.WriteLine(" Update BLOB column on table testtable...");
77 OracleLob blob = readerz.GetOracleLob (1);
78 byte[] bytes = new byte[6] { 0x31, 0x32, 0x33, 0x34, 0x35, 0x036 };
79 blob.Write (bytes, 0, bytes.Length);
82 select.Transaction.Commit();
87 cmd.CommandText = "commit";
88 cmd.ExecuteNonQuery();
90 Console.WriteLine("Create package...");
92 // create Oracle package TestTablePkg
94 "CREATE OR REPLACE PACKAGE TestTablePkg\n" +
96 " TYPE T_CURSOR IS REF CURSOR;\n" +
98 " PROCEDURE GetData(tableCursor OUT T_CURSOR);\n" +
100 cmd.ExecuteNonQuery();
102 // create Oracle package body for package TestTablePkg
104 "CREATE OR REPLACE PACKAGE BODY TestTablePkg AS\n" +
105 " PROCEDURE GetData(tableCursor OUT T_CURSOR)\n" +
108 " OPEN tableCursor FOR\n" +
110 " FROM TestTable;\n" +
113 cmd.ExecuteNonQuery();
118 Console.WriteLine("Set up command and parameters to call stored proc...");
119 OracleCommand command = new OracleCommand("TestTablePkg.GetData", connection);
120 command.CommandType = CommandType.StoredProcedure;
121 OracleParameter parameter = new OracleParameter("tableCursor", OracleType.Cursor);
122 parameter.Direction = ParameterDirection.Output;
123 command.Parameters.Add(parameter);
125 Console.WriteLine("Execute...");
126 command.ExecuteNonQuery();
128 Console.WriteLine("Get OracleDataReader for cursor output parameter...");
129 OracleDataReader reader = (OracleDataReader) parameter.Value;
131 Console.WriteLine("Read data***...");
133 while (reader.Read()) {
134 Console.WriteLine("Row {0}", r);
135 for (int f = 0; f < reader.FieldCount; f ++) {
136 Console.WriteLine("FieldType: " + reader.GetFieldType(f).ToString());
139 Console.WriteLine("blob");
140 //OracleLob lob = reader.GetOracleLob (f);
142 val = reader.GetValue(f);
143 if (((byte[])val).Length == 0)
144 val = "Empty Blob (Not Null)";
146 val = BitConverter.ToString((byte[])val);
149 val = reader.GetOracleValue(f);
151 Console.WriteLine(" Field {0} Value: {1}", f, val);
155 Console.WriteLine("Rows retrieved: {0}", r);
157 Console.WriteLine("Clean up...");