| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- * 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 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 and disconnect to an Oracle 8i or 9i database on
- Windows and Linux via OCI (Oracle Call-level Interface)</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>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>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 (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>
|