Flooosh
[mono.git] / web / oracle
index dfa77a4eb872c23b78eddf1e642b2c3ab08fde97..921954aef0b1ea1248b32d921efc734cd777418e 100755 (executable)
@@ -1,15 +1,32 @@
 * 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>Untested, but should work with Oracle 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
        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 NOT retrieve data yet.  ExecuteReader() and ExecuteScalar() in OracleCommand
-       and OracleDataReader need to be implemented.</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>Data Adapter exists, and a DataSet can be filled using it.  The
+       Data Adapter is abstract enough that it should work as expected.</li>
        
        <li>Lots of missing functionality and bugs.</li>
        
-       <li>Error handling has been started.</li>
+       <li>Works with SQL# command-line and GTK# versions in cvs.  Only works with
+       simple character data though.  SQL# For GTK# can only show the results to
+       the TextView because the Data Adapter is not yet available</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>Be able to fill a DataTable in a DataSet via a data adapter (IN PROGRESS)</li>
+       <li>Support for Oracle 8i and 9i (UNKNOWN)</li>
        <li>Support LOBs</li>
        <li>Support all the data types</li>
        <li>Implement Connection pooling</li>
@@ -62,7 +99,7 @@
        <li>Have access to an Oracle 8i 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
  
  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)";
+       dbcon = new OracleConnection (connectionString);
+       dbcon.Open ();
+       IDbCommand dbcmd = dbcon.CreateCommand ();
+       string sql = "SELECT ename, job FROM scott.emp";
+       dbcmd.CommandText = sql;
+       IDataReader reader = dbcmd.ExecuteReader ();
+       while (reader.Read ()) {
+          string employeeName = reader["ename"];
+          string job = 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;
     }
  }