* Oracle Data Provider
+
<ul>
+
+ <li>ADO.NET Data Provider for <a href="http://www.oracle.com/">Oracle</a> databases</li>
+
<li>Exists in namespace System.Data.OracleClient and assembly System.Data.OracleClient</li>
- <li>Works on Windows</li>
-
- <li>Works with Oracle 8i</li>
-
- <li>More information about Oracle can be found at <a href="http://www.oracle.com/"/>here</a></li>
+ <li>Works on Windows and Linux</li>
+
+ <li>Works with Oracle 8i and 9i.</li>
+
+ <li>Uses the Oracle CLI (Call Level Interface) which is a C library (API) for the Oracle Client
+ software</li>
+ <li>Internally, the OracleClient provider has OCI abstracted to an object-oriented programming model</li>
+
+ <li>Created by Daniel Morgan and Tim Coleman</li>
+
+ <li>Bugs with Mono or the data provider should be reported
+ in Mono's Bugzilla <a href="http://bugzilla.ximian.com/">here</a>. If you
+ do not have Bugzilla user account, it is free
+ and easy to
+ create one <a href="http://bugzilla.ximian.com/createaccount.cgi">here</a>.</li>
+
</ul>
-* Current Status
+** Current Status
<ul>
- <li>OracleConnection can connect to an Oracle 8i database on
- Windows via oci.dll</li>
+ <li>OracleConnection can connect and disconnect to an Oracle 8i or 9i database on
+ Windows and Linux via OCI (Oracle Call-level Interface)</li>
- <li>The native glue library only has makefiles for Borland C++ and
- Microsoft Visual C++ command line compilers. Only the makefile for
- Microsoft Visual C++ command-line compiler has been tested.</li>
+ <li>Can have multiple connections with different transactions where each transaction is
+ separated from the others, so a rollback or commit in one transaction
+ does not affect the other.</li>
<li>Can execute simple DML SQL statements, such as,
INSERT a row into the EMP table via the OracleCommand's ExecuteNonQuery method</li>
- <li>The System.Data.OracleClient.dll assembly can be built with mcs/mono via
- the makefile.gnu for System.Data.OracleClient or csc/.net via the
- System.Data.OracleClient.build nant build file. There is also a Visual Studio.NET
- solution it too.
+ <li>Can retrieve data via ExecuteReader and OracleDataReader. Currently,
+ supports character, numeric, some date data types. ExecuteScalar
+ also works.</li>
+
+ <li>Simple input parameters (character and numeric data) can now
+ be used in SQL queries. Output parameters do not yet work.</li>
+
+ <li>OracleException and Error handling exists now.</li>
+
+ <li>Message handling needs to be added for non-critical messages
+ received from Oracle</li>
+
+ <li>Handling of various data types need to be added.</li>
+
+ <li>Data Adapter exists, and a DataSet can be filled using it.</li>
+
+ <li>Lots of missing functionality and bugs.</li>
+
+ <li>Works with SQL# command-line and GTK# GUI versions.</li>
</ul>
-* Action Plan
+** Action Plan
<ul>
- <li>Get the makefile for the Borland C++ compiler to work
- since the <a href="http://www.borland.com/">Borland</a> C++ compiler is
- a free download</li>
- <li>Get the native glue lib System.Data.OracleClient.ocigule.dll to be built
- using gcc on Linux. This would require that Oracle 8i client software be installed
- on Linux with the oci headers and shared libraries</li>
- <li>Be able to retrieve results via a data reader</li>
- <li>Parameters support</li>
+ <li>Be able to retrieve results via a data reader (WORKING)</li>
+ <li>Parameters support (IN PROGRESS)</li>
+ <li>transactions (WORKING)</li>
<li>Stored Procedures, Functions, and Packages support</li>
- <li>Be able to fill a DataTable in a DataSet via a data adapter</li>
- <li>Support for Oracle 9i</li>
- <li>Figure out how to move the unmanaged OCI handling code in
- the oci glue C library to the managed C# assembly. I have been unable
- to successfully connect to an Oracle 8i database by using Platform Invoke and
- Marshalling in C# to the oci shared library (oci.dll on Windows)</li>
+ <li>Be able to fill a DataTable in a DataSet via a data adapter (IN PROGRESS)</li>
+ <li>Support for Oracle 8i on Linux and Windows (WORKING)</li>
+ <li>Support for Oracle 9i on Linux and Windows (WORKING)</li>
+ <li>Support for Oracle 10g on Linux and Windows [TODO]. Please let us
+ know on mono-list if Mono OracleClient works with Oracle 10g or not. If not, what errors do you get</li>
+ <li>Support Large OBjects</li>
+ <li>Support all the data types</li>
+ <li>Implement Connection pooling</li>
+ <li>Security</li>
</ul>
+
+** Testing System.Data.OracleClient
+
+<ul>
+ <li>Have a working mono and mcs</li>
+
+ <li>Have access to an Oracle 8i or 9i database or download it from
+ <a href="http://www.oracle.com/">Oracle</a>. If you are connecting
+ remotely to an Oracle database, you need the Oracle client software.
+ Registration to the <a href="http://technet.oracle.com/">Oracle Technology Network</a> is free. If installing on Linux,
+ I suggest you do a lot of searching to see how others installed Oracle on Linux.</li>
+
+ <li>Make sure System.Data.OracleClient.dll assembly is built.</li>
+
+ <li>Take a look at TestOracleClient.cs found at mcs/class/System.Data.OracleClient/Test</li>
+
+ <li>The Data Source is an Oracle TNSNAME</li>
+
+ <li>Has a connection string format:
+<pre>
+"Data Source=tnsname;User ID=userid;Password=password"
+</pre>
+ </li>
+ <li>C# Example:
+<pre>
+ using System;
+ using System.Data;
+ using System.Data.OracleClient;
+
+ public class Test
+ {
+ public static void Main (string[] args)
+ {
+ string connectionString =
+ "Data Source=testdb;" +
+ "User ID=scott;" +
+ "Password=tiger;";
+ OracleConnection dbcon = null;
+ dbcon = new OracleConnection (connectionString);
+ dbcon.Open ();
+ OracleCommand dbcmd = dbcon.CreateCommand ();
+ string sql = "SELECT ename, job FROM scott.emp";
+ dbcmd.CommandText = sql;
+ OracleDataReader reader = dbcmd.ExecuteReader ();
+ while (reader.Read ()) {
+ string employeeName = (string) reader["ename"];
+ string job = (string) reader["job"];
+ Console.WriteLine ("Employee Name: {0} Job: {1}",
+ employeeName, job);
+ }
+ // clean up
+ reader.Close ();
+ reader = null;
+ dbcmd.CommandText = sql;
+ dbcmd.ExecuteNonQuery ();
+ dbcmd.Dispose ();
+ dbcmd = null;
+ dbcon.Close ();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs -r System.Data.dll \
+ -r System.Data.OracleClient.dll
+</pre>
+ </li>
+ <li>Build on Windows:
+<pre>
+ mcs TestExample.cs /r:System.Data.dll \
+ /r:System.Data.OracleClient.dll
+</pre>
+ </li>
+ </ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
+</pre>
+ </li>
+
+</ul>
+