2010-01-15 Atsushi Enomoto <atsushi@ximian.com>
[mono.git] / web / oracle
index 9dc3864535f1cf556e02e1b76b0330feb379a864..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>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>
+