2006-11-17 Mike Kestner <mkestner@novell.com>
[mono.git] / web / oracle
index e69f378b1a967d6085fb235f97e437a74b85fbe1..a83eb776c35025d9349de80518fcf6768d50159c 100755 (executable)
 * 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>Created by Daniel Morgan.</li>
-       
-       <li>Does not support trusted connections</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
 
 <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
 
 <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 Mono.Data.OracleClient
+** Testing System.Data.OracleClient
 
 <ul>
        <li>Have a working mono and mcs</li>
        
-       <li>Have access to an Oracle 8i database or download it from
-       <a href="http://www.oracle.com/">Oracle</a>.  Registration to the
-       Oracle Technology Network is free.  If installing on Linux, I suggest you
-       do a lot of searching to see how others installed Oracle on Linux.</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 Mono.Data.OracleClient.dll assembly is built, if not, go
-       into Mono.Data.OracleClient and do a make -f makefile.gnu (on Linux) or
-       ../../nant/NAnt.exe (on Cygwin).</li>
-       
-       <li>The OCI Glue Library Mono.Data.OracleClient.ociglue.dll will need to be
-       created as well.  Has only been tested with lc (Microsoft Visual C++ command-line compiler).
-       There is a make file for Microsoft C++ and Borland C++.  I'm sure it wouldn't be hard
-       to create a makefile for gcc if installing 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"
  
  public class Test 
  {
-    public static void Main(string[] args)
+    public static void Main (string[] args)
     {
        string connectionString = 
           "Data Source=testdb;" +
           "User ID=scott;" +
           "Password=tiger;";
-       IDbConnection dbcon;
-       dbcon = new OracleConnection(connectionString);
-       IDbCommand dbcmd = dbcon.CreateCommand();
-       string sql =
-              "insert into scott.emp " +
-              "(empno, ename, job, sal, deptno) " +
-              "values(123," +
-              "'Don Smith'," +
-              "'Cook'," +
-              "23021," +
-              "20)";
-       dbcmd.ConnectionString = sql;
-       dbcmd.ExecuteNonQuery();
-       dbcmd.Dispose();
+       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.Close ();
        dbcon = null;
     }
  }
            -r System.Data.OracleClient.dll
 </pre>
                </li>
-               <li>Build on Windows via Cygwin:
+               <li>Build on Windows:
 <pre>
-       mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
-            TestExample.cs \
-            -lib:C:/cygwin/home/MyHome/mono/install/lib \
-            -r System.Data.dll -r System.Data.OracleClient.dll
+       mcs TestExample.cs  /r:System.Data.dll \
+           /r:System.Data.OracleClient.dll
 </pre>
                </li>
        </ul>