2005-06-15 Duncan Mak <duncan@novell.com>
[mono.git] / web / oracle
index dfa77a4eb872c23b78eddf1e642b2c3ab08fde97..a83eb776c35025d9349de80518fcf6768d50159c 100755 (executable)
@@ -1,53 +1,78 @@
 * 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 and Linux</li>
-       <li>Works with Oracle 8i</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>Does not support trusted connections</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 and disconnect to an Oracle 8i database on 
+       <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>No longer uses a glue library (a library between the System.Data.OracleClient.dll
-       assembly and the oci library).  In Current Mono cvs, System.Data.OracleClient 
-       directly platform invokes into the oci library thanks to Tim Coleman.</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.</li>
+       <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>Can NOT retrieve data yet.  ExecuteReader() and ExecuteScalar() in OracleCommand
-       and OracleDataReader need to be implemented.</li>
+       <li>Data Adapter exists, and a DataSet can be filled using it.</li>
        
        <li>Lots of missing functionality and bugs.</li>
        
-       <li>Error handling has been started.</li>
+       <li>Works with SQL# command-line and GTK# GUI versions.</li>
           
 </ul>
        
 ** Action Plan
 
 <ul>
-       <li>Be able to retrieve results via a data reader</li>
-       <li>Parameters support</li>
-       <li>transactions</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 8i and 9i</li>
-       <li>Support LOBs</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>
        <li>Have a working mono and mcs</li>
        
-       <li>Have access to an Oracle 8i database or download it from
+       <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     Oracle Technology Network is free.  If installing on Linux, 
+       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, if not, go
-       into System.Data.OracleClient and do a make -f makefile.gnu (on Linux) or
-       ../../nant/NAnt.exe (on Windows using Cygwin).</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>
        
  
  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)";
+       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.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>