2002-11-12 Daniel Morgan <danmorg@sc.rr.com>
authorDaniel Morgan <monodanmorg@yahoo.com>
Tue, 12 Nov 2002 15:53:12 +0000 (15:53 -0000)
committerDaniel Morgan <monodanmorg@yahoo.com>
Tue, 12 Nov 2002 15:53:12 +0000 (15:53 -0000)
* doc/oledb
* doc/odbc
* doc/mysql
* doc/sqlite
* doc/sqlclient
* doc/tdsclient
* doc/sybase
* doc/firebird: added web pages
for each specific data provider

* doc/ado-net
* doc/postgresql: updated web page
with current status

* doc/web/commands
* doc/web/makefile: updated to include

svn path=/trunk/mono/; revision=8949

27 files changed:
ChangeLog
doc/ado-net
doc/firebird [new file with mode: 0755]
doc/mysql [new file with mode: 0755]
doc/odbc [new file with mode: 0755]
doc/oledb [new file with mode: 0755]
doc/postgresql
doc/sqlclient [new file with mode: 0755]
doc/sqlite [new file with mode: 0755]
doc/sybase [new file with mode: 0755]
doc/tds-providers
doc/tdsclient [new file with mode: 0755]
doc/web/commands
doc/web/makefile
web/ado-net
web/firebird [new file with mode: 0755]
web/mysql [new file with mode: 0755]
web/odbc [new file with mode: 0755]
web/oledb [new file with mode: 0755]
web/postgresql
web/sqlclient [new file with mode: 0755]
web/sqlite [new file with mode: 0755]
web/sybase [new file with mode: 0755]
web/tds-providers
web/tdsclient [new file with mode: 0755]
web/web/commands
web/web/makefile

index b75a504173255b30c62d67035518a5dabba592f0..07faf2d6b35966f72ea2cfd3d3c304309c691a4e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,23 @@
+2002-11-12  Daniel Morgan <danmorg@sc.rr.com>
+
+       * doc/oledb
+       * doc/odbc
+       * doc/mysql
+       * doc/sqlite
+       * doc/sqlclient
+       * doc/tdsclient
+       * doc/sybase
+       * doc/firebird: added web pages
+       for each specific data provider
+       
+       * doc/ado-net
+       * doc/postgresql: updated web page
+       with current status
+       
+       * doc/web/commands
+       * doc/web/makefile: updated to include
+       new web pages
+
 2002-11-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
 
        * autogen.sh: make it work when MONO_PATH is set and it has more than
@@ -713,3 +733,4 @@ Wed Jul 11 00:36:36 CEST 2001 Paolo Molaro <lupus@ximian.com>
 
        * NEWS: 
 
+
index c5cd420829b16dc3f654ab15c3fa57e427f93230..6eced795105fd3631af4061c4d5bb94ea10f2695 100644 (file)
 
 * Action plan
 
-       The current plan to implement ADO.NET is as follows:
-
-       <b>Step 1:</b><a href="http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemDataOleDb.asp?frame=true">System.Data.OleDb</a> Provider:
-               
-       <ul>
-               * <p>On Unix systems: System.Data.OleDb uses the
-               <a href="http://www.gnome-db.org/">LibGDA</a>
-                engine.   This provider was started by Rodrigo Moya and Tim Coleman.
-
-                 <p>LibGDA is a data access engine like ADO/OLE-DB, but for Unix.  The 
-                 GDA in libGDA stands for GNU/GNOME Data Access, but it does not require GNOME.
-                 It only requires glib2 and libxml2.  LibGDA is used by 
-                 libgnomedb, GNOME-DB, and gaSQL.  glib2 and libxml2 both work on Linux
-                 and Windows.
-                 
-                 <p>There is work under way to get libgda working under 
-                 Windows using Cygwin by the GNOME-DB developers, but we have not
-                 been successful yet.
-                 
-                 <p>LibGDA has providers for 
-                 <a href="http://www.mysql.com/">MySQL</a>, 
-                 <a href="http://www.postgresql.org/">PostgreSQL</a>, 
-                 XML, 
-                 ODBC (via <a href="http://www.unixodbc.org/">unixODBC</a>),
-                 <a href="http://www.oracle.com/">Oracle</a>, 
-                 <a href="http://www.borland.com/products/downloads/download_interbase.html">Interbase</a>, 
-                 <a href="http://www.sybase.com/downloads">Sybase</a> and 
-                 <a href="http://www.microsoft.com/sql/default.asp">Microsoft SQL Server</a> (
-                 via <a href="http://www.freetds.org/">FreeTDS</a>), 
-                 <a href="http://www-3.ibm.com/software/data/db2/">IBM DB2 Universal Database</a>,
-                 <a href="http://www.hwaci.com/sw/sqlite/download.html">SQL Lite</a>,
-                 and <a href="http://www.microsoft.com/office/access/default.asp">MS Access</a> 
-                 (via <a href="http://mdbtools.sourceforge.net/">MDB Tools</a>).
-                 
-       </ul>
-
-       <b>Step 2:</b> <a href="http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemdatasqlclient.asp?frame=true">System.Data.SqlClient</a> Provider:
+       <p>The current plan to implement ADO.NET is as follows:
 
        <ul>
-               * <p>System.Data.SqlClient will become a
-                 provider for Microsoft SQL Server, both on Windows and
-                 Linux, to be compatible with applications written
-                 for the Microsoft .NET Development Framework.
-
-               * <p>The <a href="http://wwww.go-mono.com/tds-providers.html">SqlClient and SybaseClient Design</a>
-                 states that System.Data.SqlClient will be written completely in
-                 C#.  FreeTDS and jTDS projects will be used as references on how to
-                 implement the TDS protocol.  SqlClient will use common internal code with SybaseClient
-                 and TdsClient.
-         
-               * <p><a href="http://www.freetds.org/">FreeTDS</a> 
-                 is a collection of free native C libraries: tds, dblib, 
-                 and ctlib for accessing TDS protocol databases like
-                 Microsoft SQL Server and Sybase.
-                 
-               * <p><a href="http://jtds.sf.net/">jTDS</a> 
-                 is a 100% Java JDBC Provider implementing the TDS protocol
-                 which allows data access to Microsoft SQL Server and
-                 Sybase databases.       
-                 
-       </ul>
-
-       <b>Step 3:</b> <a href="http://msdn.microsoft.com/downloads/sample.asp?url=/MSDN-FILES/027/001/668/msdncompositedoc.xml&frame=true">System.Data.Odbc</a> Provider:
-       
-       <ul>
-               * An ADO.NET Provider for ODBC has been created in
-                 System.Data.Odbc by Brian Ritchie for those using ODBC.
-                 
-               * <p>On Unix, the provider uses <a href="http://www.unixodbc.org/">unixODBC</a> 
-                 for its ODBC connectivity.  The ODBC provider uses the libodbc.dll that
-                 comes with unixODBC.  
-                 
-                 <p>There is an alternative to unixODBC, <a href="http://www.iodbc.org/">iODBC</a>, 
-                 but it has not been tested with the ODBC provider.
+               <li>Either create ADO.NET providers or modify pre-exiting ADO.NET providers to
+               work with Mono
                
-               * On Windows, the provider uses the native ODBC libraries (odbc32.dll) that comes 
-                 with Windows since unixODBC is supposed to be compatible with that.
-                 If you do not have odbc32.dll on Windows, get the latest MDAC 
-                 from Microsoft.  
-                 
-               * <p>The mapping between these native shared libraries is handled 
-                 in etc/mono/config
-                 
-                 <p>In mono cvs, the file is mono/data/config.in                         
-                 
-                 <p>unixODBC has providers for:
-                 Oracle, Microsoft SQL Server and Sybase (via FreeTDS), 
-                 MySQL, PostgreSQL, Informix, IBM DB2 Universal Database, 
-                 Interbase, miniSQL (mSQL), AdabasD, Empress, Ingres, Sap DB, and others.
-                 
-       </ul>
-
-       <b>Step 4:</b> Other ADO.NET providers:
-
-       <p>The idea in Microsoft .NET System.Data is to have
-                 a managed provider for each supported DBMS.
-                 
-                 <ul>
-                 
-                 <li><p>System.Data.SqlClient for Microsoft SQL Server.  See the
-                 Mono.Data.TdsClient provider.
-                 
-                 <li><p>Mono.Data.TdsClient for older Microsoft SQL Server
-                 and Sybase databases.  This has been started by Tim Coleman
-                 and will provide the functionality for System.Data.SqlClient
-                 and Mono.Data.SybaseClient.
+               <ul>
+                       <li>Create ADO.NET Providers
+                       
+                       <ul>
+                                       <li><a href="http://www.go-mono.com/mysql.html">MySQL</a>
+                                       <li><a href="http://www.go-mono.com/odbc.html">ODBC</a>
+                                       <li><a href="http://www.go-mono.com/oledb.html">OLE DB</a>
+                                       <li><a href="http://www.go-mono.com/postgresql.html">PostgreSQL</a>
+                                       <li><a href="http://www.go-mono.com/sqlclient.html">Microsoft SQL Server</a>
+                                       <li><a href="http://www.go-mono.com/sqlite.html">SQL Lite</a>
+                                       <li><a href="http://www.go-mono.com/sybase.html">Sybase</a>
+                                       <li><a href="http://www.go-mono.com/tdsclient.html">TDS Generic</a>
+                                       <li>Providers which we do not have, but we would like to have.  Currently,
+                                       some of these databases are supported via the ODBC or OLEDB providers.
+                                       <ul>
+                                               <li><a href="http://www-3.ibm.com/software/data/db2/">IBM DB2 Universal Database</a>
+                                               <li>miniSQL
+                                               <li><a href="http://www.oracle.com/">Oracle</a> - could be done by creating C# bindings to OCI (Oracle C Call Level Interface)
+                                               <li>BerkeleyDB (Sleepycat)
+                                               <li><a href="http://www.sapdb.org/">SapDB</a>
+                                               <li>Microsoft Access - could be done by creating C# bindings to <a href="http://mdbtools.sourceforge.net">MDB Tools</a>
+                                               <li>dbase or xbase type database files
+                                               <li>Others, of course, are welcomed...
                  
-                 <li><p>Mono.Data.SybaseClient for Sybase SQL Server.  See the
-                 Mono.Data.TdsClient provider.
-                         
-                 <li><p>Mono.Data.PostgreSqlClient for PostgreSQL.  Started by
-                 Rodrigo Moya, Daniel Morgan, and Tim Coleman.  This provider 
-                 uses the PostgreSQL C API (libpq.so on Linux and pq.dll on
-                 Windows).
-          
-          <li><p>Mono.Data.MySql for MySQL client/server database.  Started by
-          Daniel Morgan using C# Bindings to MySQL from Brad Meril.  
-          This provider uses the MySQL C API (libmysqlclient.so on
-          Linux and libmySQL.dll on Windows).
-          
-          <li><p>Mono.Data.SqliteClient for the SQL Lite database.  Started by
-          Vladimir Vukicevic.  This provider uses 
-          <a href"http://www.hwaci.com/sw/sqlite/download.html">SQL Lite</a> database engine.
-          It is used in mPhoto.
-          
-          </ul>
-          
-          <p>See Current Status for more information on these providers.
-          
-                 <p>Some providers we would like to have are
-                 Mono.Data.DB2, Mono.Data.miniSQL,  
-                 System.Data.OracleClient, Mono.Data.Interbase,
-                 Mono.Data.Berkeley, and SapDB.
-                 Others, of course, are welcomed.
-                                 
-       </ul>
-
-       <b>Step 5:</b> Create tools for ADO.NET
-
+                                       </ul>
+                               </ul>
+                               <br>
+                       <li>Modify Pre-existing ADO.NET Providers to work with Mono.  This may
+                       require fixing or implementing areas of Mono too.
+                               <ul>
+                                       <li><a href="http://www.go-mono.com/firebird.html">Firebird Interbase</a>
+                                       <li><a href="http://gborg.postgresql.org/project/npgsql/projdisplay.php">Npgsql</a> a PostgreSQL provider
+                                       written in 100% C#
+                                       <li><a href="http://sourceforge.net/projects/mysqldrivercs/">MySQLDriverCS</a> is a MySQL provider written in C#
+                                       <li><a href="http://sourceforge.net/projects/mysqlnet/">MySQLNet</a> is a MySQL Manager provider written in C#
+                               </ul>
+               </ul>
+       <br>
+       <li>Create Tools for Configuration, Testing, and Entering SQL Queries  
        <ul>
-               * <p><b>SQL# CLI - a command-line tool</b> to execute SQL commands,
+               <li><b>SQL# CLI - a command-line tool</b> to execute SQL commands,
                  test connection strings, and connect to various ADO.NET
-                 providers in Mono.  The SQL# CLI has been started on and can be found in 
+                 providers in Mono.  The SQL# CLI can be found in
                  mcs/tools/SqlSharp/SqlSharpCli.cs
                  It is written in C# and runs on Mono and .NET
 
-               * <p><b>SQL# GUI - a GUI tool</b> to execute SQL commands.  This
-                 has not been started.  The idea is to use the GnomeDbSqlEditor,
-                 GnomeDbBrowser, and GnomeDbGrid gtk+ widgets that exists 
-                 in libgnomedb# that is part of gtk#.  However, we could base it
-                 on System.Windows.Forms, but System.Windows.Forms in Mono 
-                 is not as complete as gtk#.  
-               
-          <p>libgnomedb uses libgda for its data model and data access capabilities and
-          can be found <a href="http://www.gnome-db.org/">here</a>.  libgnomedb#
-          and gda# are part of <a href="http://gtk-sharp.sourceforge.net/">gtk#</a>
-          libgnomedb# is the C# bindings to libgnomedb which is a gtk+ GUI 
-          widget library for data access.       
-          gda# is the C# bindings to libgda which is a generic data access
-          library that has providers for many databases.
+               <li><p><b>SQL# GUI - a GUI tool</b> to execute SQL commands. 
+                 Currently, there is SQL# For GTK# which
+                 can be found at 
+                 mcs/tools/SqlSharp/gui/gtk-sharp.  It has a SQL editor with 
+                 syntax hi lighting of SQL keywords
           
-               * <p><b>Configuration Command-Line and GUI Tools for ADO.NET</b>.  
-                 These tools have
-                 not been started.  They could become a part of SQL# though.  The
-                 configuration tool can be used to set up DSNs for the ODBC and OLE-DB
-                 providers and configurations for 
-                 their underlying libraries (unixODBC and libgda). The configuration
-                 tool could set database client library configurations too, such as,
-                 freetds.conf for Microsoft SQL Server and Sybase, 
-                 The tools would be written in C# and run on Mono.
+               <li><b>Configuration Command-Line and GUI Tools for ADO.NET</b>.  
+                 These tools have not been started.  The tools would be written in
+                 C# and run on Mono. The
+                 configuration tool can be used to do the following:
+                 <ul> 
+                       <li>setup DSNs for the ODBC and OLE-DB
+                               providers and configurations for 
+                               their underlying libraries (unixODBC and libgda)
+                   <li>setup configurations for the Mono.Data.ProviderFactory
+                               that Brian Ritchie created
+                   <li>setup native database client library configurations too, such as,
+                               freetds.conf for Microsoft SQL Server and Sybase
+                 </ul>
                
        </ul>
+</ul>
        
 * Current Status
-       
-       <p>The <b>PostgreSQL</b> provider in Mono.Data.PostgreSqlClient can connect, 
-       execute commands, retrieve data via a Data Reader, read data in a DataTable 
-       in a DataSet via a Data Adapter, get a DataTable holding schema data,
-       and use input parameters in its SQL, and SQL errors and exceptions for PostgreSQL
-       are working.
-               
-       <p><b>System.Data.OleDb</b> is working with libgda (an OLE-DB/ADO data access for Unix).  
-       The C-Sharp bindings to libgda currently work - meaning they can compile, run, and you can connect to a
-       PostgreSQL database via libgda via the C-Sharp bindings to libgda.  Basic
-       functionality (execution of commands, data retrieval, transactions, etc) are
-       now working. Current focus is on filling up the missing pieces (Data adapters
-       mainly) and schema support.  We need help building libgda on Windows though.  libgda
-       builds find on linux though.  An inital implementation of GetSchemaTable() for
-       the OleDbDataReader has been checked into cvs.  GetSchemaTable() isn't correct for OleDb,
-       but the foundation is there.
-       
-       <p>Tim Coleman has just started on the <b>TDS</b> protocol support neccessary for the
-       <b>SqlClient, SybaseClient, and TdsClient</b> providers. The provider will be 
-       implemented in pure managed C#.  We are using FreeTDS and jTDS as references.  
-       The TDS provider will exist     in Mono.Data.TdsClient.  
-       The System.Data.SqlClient and Mono.Data.SybaseClient will
-       be based off of Mono.Data.TdsClient provider.  Currently, we are providing
-       the foundation for the TdsClient provider.  Next step is to implement the TDS
-       protocol in C#.
-       
-       <p><b>ODBC</b> support has been started by Brian Ritchie.\r
-       It uses unixODBC on Linux and uses native ODBC support on Windows.\r
-       There is basic implementations of \r
-    OdbcConnection, OdbcCommand, OdbcDataReader, OdbcParameter, and \r
-    OdbcParameterCollection.  The provider can execute queries and display result sets \r
-    (and ExecuteNonQuery too).  Currently, developers are working on the Parameter & \r
-    Transaction support.  It was tested on Debian against a DB2 7.2 UDB.  It was\r
-    also tested on Windows XP against a Microsoft SQL Server 2000 database.\r
-       
-       <p><b>Mono.Data.MySql</b> is an ADO.NET provider for 
-       the <b>MySQL</b> client/server database management system
-       that uses the MySQL C Client Library.   Currently, we can connect, 
-       execute simple commands, and
-       retrieve results using a data reader.  A schema DataTable has been partially 
-       implemented which is returned from GetSchemaTable() in MySqlDataReader.
-       The shared client libraries 
-       between windows version and linux are different: windows has libmySQL.dll 
-       while linux has libmysqlclient.so.  This is handled by the 
-       file etc/mono/config which is mapped by the mono runtime in knowing
-       which native shared library to load.  In cvs, this file is mono/config.in and
-       can be modified with a text editor.  
-       The C# Bindings to MySQL are thanks to Brad Meril.
 
-       <p><b>Mono.Data.SqliteClient</b> is an ADO.NET provider for
-       the <a href"http://www.hwaci.com/sw/sqlite/download.html">SQL Lite</a>
-       database.  There is SQL Lite binaries for Linux and Windows.  sqlite.dll on Windows 
-       and sqlite.so on Linux. The SQL Lite proivder
-       was contributed by Vladimir Vukicevic.
+       <p>Variouls ADO.NET Providers have been created: PostgreSQL, MySQL, Sybase, SQL Lite,
+       Microsoft SQL Server, OLE DB, ODBC, and TDS Generic.  See their respective web page for
+       more information.
                
        <p><b>DataSet, DataAdaptor, DataTable, DataRelation, DataRow, DataColumn,
        DataColumnCollection, DataRowCollection, and others</b> need more work.  There are
        GnomeDbSqlEditor, GnomeDbList, GnomeDbLogin, GnomeDbReportEditor, GnomeDbTableEditor, 
        GnomeDbCombo, and GnomeDbForm.  Rodrigo Moya is the best person to contact.
                
-       <p><b>XML support in System.Data</b> needs to be started.  This involves working on
+       <p><b>XML support in System.Data</b> needs work.  This involves working on
        the classes: DataSet, XmlDataDocument, and the method ExecuteXmlReader() that
        exists in a provider's class that implements IDbCommand, and others.
+       Stuart Caborn has started the XML support in a DataSet.  Tim Coleman started
+       XML support in the ExecuteXmlReader() in a SqlCommand.
        
-       <p><b>ADO.NET Multiplexor Provider</b> needs to be created.  This is not
+       <p><b>ADO.NET Provider Factory</b> has been started by Brian Ritchie.  The 
+       Provider Factory is used to dynamically create data provider
+       connections and data adapters based on configuration information.  This
+       provider factory can also provide utility functions needed by a lot of 
+       providers but are not exposed via the provider.
+       
+       <p><b>ADO.NET Multiplexor Provider</b> needs to be created.  It can use the
+       ADO.NET Provider Factory to create its connections and adapters, but the
+       Multiplexor Provider is a Generic Provider that internally uses an existing
+       provider based on configuration options.  This is not
        part of Microsoft .NET, but it needs to be able to run on Microsoft .NET
        and Mono.  This provider can be a generic provider, much like the ODBC.NET and
        OLEDB.NET providers are, but be written in 100% C# and be configurable via
        a configuration file.  This provider will multiplex to other providers
        that exist.  If one does not exist for a given DBMS, 
-       default to the ODBC or OLEDB .NET provider.  Or it could be a class
-       that its sole duty is to dynamically create a provider's Connection class
-       based on a configuration file.  It can provide some utility functions as
-       well that can be used in all or most of the providers, such as, what
-       parameter marker character should be used: a colon, at, question mark,
-       or square brackets.
+       default to the ODBC or OLEDB .NET provider.  
        
-       <p>According to Gonzalo, this is how it could be implemented:
-\r
-       <p>After some work done in System.Configuration, you can now do something\r
-    like:   \r
-\r
-       <p>\r
- <pre>\r
- // Get an instance of the multiplexor from machine.config file\r
- // Can be overriden in the application config file    \r
- object o = ConnectionSettings.GetConfig \r
-               ("mono.data/multiplexor");\r
- if (o == null)\r
-       --- error\r
-    \r
- Multiplexor mp = (Multiplexor) o;\r
-    \r
- // may be a string [] argument can help passing arguments\r
- IDbConnection cnc = mp.CreateConnection (providerName);\r
-</pre>    \r
-\r
-       <p>and in the machine.config file:\r
-\r
-<pre>\r
-  &lt;configuration&gt;\r
-   &lt;configSections&gt;\r
-    &lt;section name="mono.data"\r
-      type="Mono.Data.MultiplexorSectionHandler,Mono.Data"/&gt;\r
-    ....\r
-   &lt;/configSections>\r
-   ...\r
-   &lt;sectionGroup name="mono.data"&gt;\r
-     &lt;multiplexor&gt;\r
-       &lt;add provider="PostgreSQL" \r
-          type="Mono.Data.PostgreSQLClient,Mono.Data"\r
-          validate="false" \r
-          parameters="USER=xxx;HOST=127.0.0.1;DBNAME=xxx"/&gt;\r
-     &lt;/multiplexor&gt;\r
-   &lt;/sectionGroup&gt;\r
-  &lt;/configuration&gt;\r
-</pre>\r
-\r
-       <p>validate="false" tells MultiplexorSectionHandler not to load the Type\r
-       until an instance is required. You can add more attributes or whatever\r
-       inside <multiplexor> as long as MultiplexorSectionHandler parses it.\r
-\r
-<pre>\r
-public class MultiplexorSectionHandler :\r
-IConfigurationSectionHandler\r
-{\r
-    public object Create (object parent, \r
-      object configContext,\r
-      XmlNode section)\r
-    {\r
-       Multiplexor mp;\r
-       // Here you get the ChildNodes and \r
-       // set up a Multiplexor\r
-       // instance that will hold the information \r
-       // needed to create \r
-       // instances of each provider. Only one \r
-       // instance will be \r
-       // created by the config system.\r
-            return mp;\r
-    }\r
- }\r
-</pre>\r
-       <p>This way, if our providers works with MS, the user can test them in both\r
-       MS and mono by just adding a few lines to machine.config (i still have\r
-       to upload a default machine.config file for mono). And this is the .NET\r
-       way of doing it (of course, if you prefer, you can use the other config\r
-       file. I just wanted to make people aware of this feature that now works\r
-       on mono).\r
+       <p>According to Gonzalo, this is how the configuration could be implemented for
+       the Provider Factory and Multiplexor Provider.
+
+       <p>After some work done in System.Configuration, you can now do something
+    like:   
+
+       <p>
+ <pre>
+ // Get an instance of the multiplexor from machine.config file
+ // Can be overriden in the application config file    
+ object o = ConnectionSettings.GetConfig 
+               ("mono.data/multiplexor");
+ if (o == null)
+       --- error
+    
+ Multiplexor mp = (Multiplexor) o;
+    
+ // may be a string [] argument can help passing arguments
+ IDbConnection cnc = mp.CreateConnection (providerName);
+</pre>    
+
+       <p>and in the machine.config file:
+
+<pre>
+  &lt;configuration&gt;
+   &lt;configSections&gt;
+    &lt;section name="mono.data"
+      type="Mono.Data.MultiplexorSectionHandler,Mono.Data"/&gt;
+    ....
+   &lt;/configSections>
+   ...
+   &lt;sectionGroup name="mono.data"&gt;
+     &lt;multiplexor&gt;
+       &lt;add provider="PostgreSQL" 
+          type="Mono.Data.PostgreSQLClient,Mono.Data"
+          validate="false" 
+          parameters="USER=xxx;HOST=127.0.0.1;DBNAME=xxx"/&gt;
+     &lt;/multiplexor&gt;
+   &lt;/sectionGroup&gt;
+  &lt;/configuration&gt;
+</pre>
+
+       <p>validate="false" tells MultiplexorSectionHandler not to load the Type
+       until an instance is required. You can add more attributes or whatever
+       inside <multiplexor> as long as MultiplexorSectionHandler parses it.
+
+<pre>
+public class MultiplexorSectionHandler :
+IConfigurationSectionHandler
+{
+    public object Create (object parent, 
+      object configContext,
+      XmlNode section)
+    {
+       Multiplexor mp;
+       // Here you get the ChildNodes and 
+       // set up a Multiplexor
+       // instance that will hold the information 
+       // needed to create 
+       // instances of each provider. Only one 
+       // instance will be 
+       // created by the config system.
+            return mp;
+    }
+ }
+</pre>
+       <p>This way, if our providers works with MS, the user can test them in both
+       MS and mono by just adding a few lines to machine.config (i still have
+       to upload a default machine.config file for mono). And this is the .NET
+       way of doing it (of course, if you prefer, you can use the other config
+       file. I just wanted to make people aware of this feature that now works
+       on mono).
        
        <p><b>Building System.Data</b>
        
diff --git a/doc/firebird b/doc/firebird
new file mode 100755 (executable)
index 0000000..035e229
--- /dev/null
@@ -0,0 +1,37 @@
+* Firebird and Interbase Data Provider
+
+<ul>
+       <li>Does not exist in Mono, but is a separate project
+       
+       <li><a href="http://sourceforge.net/projects/firebase-net/">Firebird and Interbase
+       Data Provider</a> for Microsoft .NET and Mono
+       
+       <li><a href="http://firebird.sourceforge.net/index.php">Firebird Relational Database</a> is 
+       an independent project which uses source code based on the Interbase source code released
+       by Borland under the Interbase Public License.
+</ul>
+
+* Current Status
+
+<ul>
+       <li>Currently, it is able to connect to Firebird and Interbase databases 
+          and execute commands
+          
+       <li>The new data
+ provider/driver is written in C# and provides a high-performance native
+ implementation of the GDS32/API functions. This means that .Net developers
+ will be able to access Firebird databases without the need of Firebird
+ client install. In support of the new module, a new mailing list
+ "firebird-net-provider" has been created. Please use this list for any 
+ questions that you may have about the provider. This provider has been made
+ available by Carlos Guzmán Álvarez (aka "Carlos G.A."), who has also made a
+ number of contributions to the OdbcJdbc code.
+</ul>   
+   
+* Action Plan
+
+<ul>
+       <li>Get it to work on Mono too
+       
+       <li>TODO
+</ul>  
diff --git a/doc/mysql b/doc/mysql
new file mode 100755 (executable)
index 0000000..b8c96d9
--- /dev/null
+++ b/doc/mysql
@@ -0,0 +1,66 @@
+* MySQL Data Provider
+
+<ul>
+       <li>MySQL Data Provider for 
+       <a href="http://www.mysql.com/">MySQL</a> databases.  It is written in C# and uses
+       the MySQL C Client Library
+
+       <li>Exists in namespace Mono.Data.MySql and assembly Mono.Data.MySql
+       
+       <li>Works on Windows and Linux via the MySQL client shared library
+           (libmySQL.dll on Windows and libmysqlclient.so on Linux).
+           
+    <li>Started by Daniel Morgan using C# Bindings to MySQL from Brad Meril.  
+    
+    <li><a href="http://www.mysql.com/articles/dotnet/">Exploring MySQL in the Microsoft .NET Environment</a> is an article
+    by Mr. Venu who is a MySQL AB developer.
+    
+    <li>Other projects which have created a .NET Data provider for MySQL in C#
+               <ul>
+                       <li><a href="http://sourceforge.net/projects/mysqldrivercs/">MySQLDriverCS</a> is a MySQL provider written in C#
+                       <li><a href="http://sourceforge.net/projects/mysqlnet/">MySQLNet</a> is a MySQL Manager provider written in C#
+
+               </ul>
+</ul>
+    
+* Current Status
+
+<ul>
+       <li>can connect
+       
+       <li>can execute non-queries via ExecuteNonQuery()
+       
+       <li>can execute aggregates via ExecuteScalar() and retrieve the
+       single row/single column result
+       
+       <li>can execute queries and retrieve results using a data reader.
+       
+       <li>a schema DataTable has been partially 
+       implemented which is returned from GetSchemaTable() in MySqlDataReader.
+       
+       <li>a DataTable in a DataSet can be filled via a MySqlDataAdapter 
+               
+       <li>The shared client libraries 
+       between windows version and linux are different: windows has libmySQL.dll 
+       while linux has libmysqlclient.so.  This is handled by the 
+       file etc/mono/config which is mapped by the mono runtime in knowing
+       which native shared library to load.  In cvs, this file is mono/config.in and
+       can be modified with a text editor.  
+</ul>
+
+* Action plan
+
+The current plan to work on the MySQL data provider:
+       
+       <ul>
+               <li>Parameters support via MySqlParameter and MySqlParameterCollection
+               
+               <li>Support LOBs (Large Object)
+               
+               <li>Change the MySQL provider to not be dependent on a client library and
+                   be written in 100% C#
+                   
+               <li>Connection pooling
+               
+               <li>Get the provider to work like other data providers
+       </ul>
diff --git a/doc/odbc b/doc/odbc
new file mode 100755 (executable)
index 0000000..c911371
--- /dev/null
+++ b/doc/odbc
@@ -0,0 +1,49 @@
+* ODBC Data Provider
+<ul>
+       <li>Exists in namespace System.Data.Odbc and assembly System.Data
+       
+       <li>Works on Windows and Linux
+       
+       <li>Works on Windows via the native Windows odbc32.dll
+       
+       <li>Works on Linux via <a href="http://www.unixodbc.org/">unixODBC</a>
+       
+       <li>List of unixODBC <a href="http://www.unixodbc.org/drivers.html">drivers</a> and
+       an alternative list
+       
+       <li>An alternative to unixODBC, but not tested with this 
+       provider is <a href="http://www.iodbc.org">iODBC</a>
+       
+       <li>List of <a href="http://ourworld.compuserve.com/homepages/Ken_North/odbcvend.htm">ODBC Vendors</a>
+               
+       <li>ODBC Provider created by Brian Ritchie.
+</ul>
+       
+* Current Status
+
+<ul>
+       <li>Connect on Windows via native Windows odbc32.dll
+       
+       <li>Connect on Linux via unixODBC's libodbc.so
+       
+       <li>Various databases have been tested using their
+          ODBC drivers: MySQL, Oracle, IBM DB2, and Microsoft SQL Server
+          
+       <li>Can execute non-query commands via ExecuteNonQuery of a OdbcCommand
+       
+       <li>Can execute aggreates and retrieve a single row single column result via
+       ExecuteScalar of a OdbcCommand
+       
+       <li>Can execute queries via ExecuteReader of a OdbcCommand and 
+       retrieve results using an OdbcDataReader.
+       
+       <li>Can get a DataTable containing schema info via GetSchemaTable() in a OdbcDataReader
+</ul>
+       
+* Action Plan
+
+<ul>
+       <li>Create a Data Adapter to Fill data into a DataTable in a DataSet
+       
+       <li>TODO
+</ul>
diff --git a/doc/oledb b/doc/oledb
new file mode 100755 (executable)
index 0000000..d1b1625
--- /dev/null
+++ b/doc/oledb
@@ -0,0 +1,53 @@
+* OLE DB Provider
+<ul>
+       <li> Provides a OleDb-like provider for Mono
+       using <a href="http://www.gnome-db.org/">GDA</a> as the data access layer.
+
+       <li> Exists in namespace System.Data.OleDb and assembly System.Data
+       
+       <li>Created by Rodrigo Moya
+       
+       <li>LibGDA has providers for:
+       <ul> 
+                 <li><a href="http://www.mysql.com/">MySQL</a> 
+                 <li><a href="http://www.postgresql.org/">PostgreSQL</a>
+                 <li>XML
+                 <li>ODBC (via <a href="http://www.unixodbc.org/">unixODBC</a>)
+                 <li><a href="http://www.oracle.com/">Oracle</a>
+                 <li><a href="http://www.borland.com/products/downloads/download_interbase.html">Interbase</a>
+                 <li><a href="http://www.sybase.com/downloads">Sybase</a> and
+                 <a href="http://www.microsoft.com/sql/default.asp">Microsoft SQL Server</a> (
+                 via <a href="http://www.freetds.org/">FreeTDS</a>)
+                 <li><a href="http://www-3.ibm.com/software/data/db2/">IBM DB2 Universal Database</a>
+                 <li><a href="http://www.hwaci.com/sw/sqlite/download.html">SQL Lite</a>
+                 <li><a href="http://www.microsoft.com/office/access/default.asp">MS Access</a> 
+                 (via <a href="http://mdbtools.sourceforge.net/">MDB Tools</a>)
+       </ul>
+</ul>
+       
+* Current Status
+       <ul>
+               <li>The OleDb provider is working with libgda (an OLE-DB/ADO data access for Unix).  
+               The C-Sharp bindings to libgda currently work - meaning they can compile, run, 
+               and you can connect to a
+               PostgreSQL database via libgda via the C-Sharp bindings to libgda.  
+       
+               <li>Basic
+               functionality (execution of commands, data retrieval, transactions, etc) are
+               now working. 
+       
+               <li>An inital implementation of GetSchemaTable() for
+               the OleDbDataReader has been checked into cvs.  GetSchemaTable() isn't correct for OleDb,
+               but the foundation is there.
+       </ul>
+
+* Action Plan
+       <ul>
+               <li>Current focus is on filling up the missing pieces (Data adapters
+               mainly) and schema support.  
+       
+               <li>We need help building libgda on Windows though.  libgda
+               builds find on linux though.  
+
+               <li>Need to make the OleDb provider compatible with the OleDb provider in Microsoft .NET
+       </ul>
index 344f6beacc8ced8afa4ddc62d2290bd19cc82c68..afc7ecea2dd0a1104ac78199687d1c9e035bd439 100644 (file)
-* PostgreSQL Provider\r
-\r
-       <p>Exists in Mono.Data.PostgreSql now.\r
-               
-       <p>We are able to do simple CREATE TABLE, DROP TABLE, UPDATE, INSERT, and
+* PostgreSQL Data Provider
+
+<ul>
+       <li>Exists in namespace Mono.Data.PostgreSql and assembly Mono.Data.PostgreSql
+       
+       <li>Is a Mono Data Provider for the <a href="http://www.postgresql.org/">PostgreSQL</a>
+       client/server database management system.
+       
+       <li>Written in C# and has C# bindings to the PostgreSQL C Client library pq.dll on Windows
+       and libpq.so on Linux.
+</ul>
+
+* Current Status
+
+<ul>
+       <li>We are able to do simple CREATE TABLE, DROP TABLE, UPDATE, INSERT, and
        DELETE SQL commands using the ExecuteNonQuery method in PgSqlCommand.  
        
-       <p>We can execute multiple queries and do a NextResult() in PgSqlDataReader()
+       <li>We can execute multiple queries and do a NextResult() in PgSqlDataReader()
        to get the next result set.  
        
-       <p>We are also able to do simple aggregate functions, 
+       <li>We are also able to do simple aggregate functions, 
        ie, count(), sum(), min(), and max() 
        in a simple SELECT SQL query using the ExecuteScalar() now.  
        
-       <p>We are also able to retrieve data with a simple SELECT SQL query 
+       <li>We are also able to retrieve data with a simple SELECT SQL query 
        using ExecuteReader() which returns a PgSqlDataReader.  We are able to
        use GetSchemaTable() to get the meta data about the table columns.  
        We are able     to Read() to get each row from the result set.  
        
-       <p>Here is a sample of code that is based on PostgresTest.cs and
-       TestSqlDataReader.cs tests:
-       
-<pre>
- static void SelectData (IDbConnection cnc) {
-       
-   IDbCommand selectCommand = cnc.CreateCommand();
-   IDataReader reader;
-
-   selectCommand.CommandType = CommandType.Text;
-   selectCommand.CommandText = 
-     "select * from pg_user;" + \r
-        "select * from pg_tables;" + \r
-     "select * from pg_database";\r
-
-   reader = selectCommand.ExecuteReader ();
-
-   do {\r
-       // get the DataTable that holds\r
-       // the schema\r
-       DataTable dt = rdr.GetSchemaTable();\r
-\r
-       if(rdr.RecordsAffected != -1) {\r
-               // Results for \r
-               // SQL INSERT, UPDATE, DELETE Commands \r
-               // have RecordsAffected >= 0\r
-               Console.WriteLine("Result is from \r
-                       a SQL Command \r
-                (INSERT,UPDATE,DELETE).  \r
-                       Records Affected: " + \r
-                               rdr.RecordsAffected);\r
-       }\r
-       else if (dt == null)\r
-               Console.WriteLine("Result is from \r
-                     a SQL Command \r
-                     not (INSERT,UPDATE,DELETE).   \r
-                     Records Affected: " + \r
-                                  rdr.RecordsAffected);\r
-       else {\r
-               // Results for\r
-               // SQL not INSERT, UPDATE, nor DELETE\r
-               // have RecordsAffected = -1\r
-               Console.WriteLine("Result is from a \r
-                  SQL SELECT Query.  \r
-                  Records Affected: " + \r
-                        rdr.RecordsAffected);\r
-               \r
-               // Results for a SQL Command \r
-                    (CREATE TABLE, SET, etc)\r
-               // will have a null reference returned \r
-           from GetSchemaTable()\r
-               // \r
-               // Results for a SQL SELECT Query\r
-               // will have a DataTable returned \r
-                    from GetSchemaTable()\r
-\r
-               results++;\r
-               Console.WriteLine("Result Set " + \r
-                        results + "...");\r
-                                               \r
-               // number of columns in the table\r
-               Console.WriteLine("   Total Columns: " +\r
-                       dt.Columns.Count);\r
-\r
-               // display the schema\r
-               foreach (DataRow schemaRow \r
-                       in dt.Rows) {\r
-                       foreach (DataColumn schemaCol \r
-                               in dt.Columns)\r
-                               Console.WriteLine(\r
-                                   schemaCol.ColumnName + \r
-                                       " = " + \r
-                                       schemaRow[schemaCol]);\r
-                               Console.WriteLine();\r
-                       }\r
-\r
-                       int nRows = 0;\r
-                       string output, \r
-                               metadataValue, \r
-                               dataValue;\r
-                       // Read and display the rows\r
-                       Console.WriteLine("Gonna do a \r
-                               Read() now...");\r
-                       while(rdr.Read()) {\r
-                               Console.WriteLine("   Row " + \r
-                                       nRows + ": ");\r
-                                       \r
-                               for(c = 0; \r
-                                       c < rdr.FieldCount; \r
-                                       c++) {\r
-                                       // column meta data \r
-                                       DataRow dr = dt.Rows[c];\r
-                                       metadataValue = \r
-                                               "    Col " + \r
-                                               c + ": " + \r
-                                               dr["ColumnName"];\r
-                                               \r
-                                       // column data\r
-                                       if(rdr.IsDBNull(c) == true)\r
-                                               dataValue = " is NULL";\r
-                                       else\r
-                                               dataValue = \r
-                                                       ": " + \r
-                                                       rdr.GetValue(c);\r
-                               \r
-                                       // display column meta \r
-                                       // data and data\r
-                                       output = metadataValue + \r
-                                                       dataValue;                                      \r
-                                       Console.WriteLine(output);\r
-                               }\r
-                               nRows++;\r
-                       }\r
-                       Console.WriteLine(\r
-                               "   Total Rows: " + \r
-                               nRows);\r
-               }       \r
-       } while(rdr.NextResult());\r
-       Console.WriteLine("Total Result sets: " + \r
-               results);\r
-                       \r
-       rdr.Close();\r
- }
-
-</pre>
-       
-       <p>We are able to get 
+       <li>We are able to get 
        String data (char, character, text, varchar), Int16 (smallint),
        Int32 (integer), Int64 (bigint), DateTime (time, date, timestamp),
        Boolean (boolean), Single (float), and Double (double).
        More data types will come later.  Note, the types that do work still 
        need thorough testing.
        
-       <p>Rows that are returned which contain columns that are NULL are handled now. 
+       <li>Rows that are returned which contain columns that are NULL are handled now. 
        The PgSqlDataReader method IsDBNull() needs to be called to determine 
        if a field IS NULL before trying to read data from that field.
        
-       <p>Calling PostgreSQL stored procedures works.  It does not work perfectly.  
+       <li>Calling PostgreSQL stored procedures works.  It does not work perfectly.  
        It may not
        even work to specification - yet.  If you want to test it yourself, look at
        TestSqlDataReader.cs or PostgresTest.cs in
        mcs/class/System.Data/Test.  
        
-       <p>Below, I have some sample code you can
+       <li>Below, I have some sample code you can
        use to call a PostgreSQL stored procedure named "version".  This stored
        procedure returns a string containing the PostgreSQL server version.  Notice
        the CommandType is StoredProcedure and the method ExecuteScalar() is called.
        
-       <p>ExecuteScalar() is a lightweight method in class PgSqlCommand that only returns
+       <li>ExecuteScalar() is a lightweight method in class PgSqlCommand that only returns
        one row and one column as one object - even if there is more than row or column.
-       
-<pre>
- static string GetDatabaseServerVersion (PgSqlConnection cnc) 
- {                      
-       PgSqlCommand cmd = cnc.CreateCommand ();
-       string data;
-
-       cmd.CommandType = CommandType.StoredProcedure;
-       cmd.CommandText = "version";
-                                                       
-       data = (string) cmd.ExecuteScalar ();
-
-       return data;
- }
-</pre>
                        
-       * <p>We have the beginnings of Parameters support PostgreSQL.  Only
+       <li>We have the beginnings of Parameters support PostgreSQL.  Only
        Input Parameters are currently supported.  Output, Input/Output,
        and Return parameters still need to be done.
        
-       <p>A lot of functionality in System.Data is missing, but the 
+       <li>A lot of functionality in System.Data is missing, but the 
        infrastructure is starting to come together.
        
-       <p>A lot of Exceptions need to be thrown for various exceptions.  However,
+       <li>A lot of Exceptions need to be thrown for various exceptions.  However,
        PgSqlException, PgSqlErrorCollection, and PgSqlError have been partially
        implemented.
        
-       <p>Tim Coleman and Rodrigo Moya got the beginnings of the
+       <li>Tim Coleman and Rodrigo Moya got the beginnings of the
        PgSqlDataAdapter/DataSet/DataTable/DataRow to work.  Currently, 
        the PgSqlDataAdapter can Fill() relational data into a DataTable in a DataSet.
        See the test mcs/class/System.Data/Test/TestSqlDataAdapter.cs to see it in action.
-       Below, I show a snippets from the test:
-       
-<pre>
- string connectionString;
- string sqlQuery;
- PgSqlDataAdapter adapter;
- DataSet dataSet = null;
-
- connectionString =
-       "host=localhost;" +
-       "dbname=test;" +
-       "user=postgres";
-                                               
- sqlQuery = "select * from pg_tables";
-
- adapter = new PgSqlDataAdapter (sqlQuery, 
-                       connectionString);
-                               
- dataSet = new DataSet ();
-
- adapter.Fill (dataSet);
-                       
- if (dataSet != null) {
-       foreach (DataRow row in dataSet.Tables["Table"].Rows)
-               Console.WriteLine("tablename: " + row["tablename"]);
- }
-</pre> 
+</ul>
 
 * Testing the PostgreSQL Provider
 
                a linux user 'postgres' created and initdb ran.  Or maybe not.
 
 <pre>
- su\r
- adduser postgres\r
- mkdir /usr/local/pgsql/data\r
- chown postgres /usr/local/pgsql/data\r
- su - postgres\r
- initdb -D /usr/local/pgsql/data\r
- postmaster -i -D /usr/local/pgsql/data\r
- createdb test\r
+ su
+ adduser postgres
+ mkdir /usr/local/pgsql/data
+ chown postgres /usr/local/pgsql/data
+ su - postgres
+ initdb -D /usr/local/pgsql/data
+ postmaster -i -D /usr/local/pgsql/data
+ createdb test
  psql test
 </pre>
        
@@ -395,10 +238,10 @@ net start ipc-daemon
                  
                        <p>
 <pre>
-mkdir /usr/local/pgsql/data\r
-initdb -D /usr/local/pgsql/data\r
-postmaster -D /usr/local/pgsql/data\r
-createdb test\r
+mkdir /usr/local/pgsql/data
+initdb -D /usr/local/pgsql/data
+postmaster -D /usr/local/pgsql/data
+createdb test
 psql test              
 </pre>
                  
@@ -467,8 +310,8 @@ PostgreSQL: "host=localhost dbname=test user=joe password=smoe"
        to PgSqlConnection, then you need to run mcs like:
 
 <pre>
- mono f:/cygwin/home/DanielMorgan/mono/install/bin/mcs.exe \\r
-    PostgresTest.cs \\r
+ mono f:/cygwin/home/DanielMorgan/mono/install/bin/mcs.exe \
+    PostgresTest.cs \
     -r System.Data.dll \
     -r Mono.Data.PostgreSqlClient.dll
 </pre>
@@ -494,168 +337,176 @@ mono PostgresTest.exe
 
 <p>
 <pre>   
-\r
- danmorg@DANPC ~/mono/mcs/class/System.Data/Test\r
- $ mcs PostgresTest.cs -r System.Data.dll\r
-\r
- danmorg@DANPC ~/mono/mcs/class/System.Data/Test\r
- $ mono PostgresTest.exe\r
-        Postgres provider specific tests...\r
-\r
-                Drop table:\r
- Error (don't worry about this one)SqlError:PGRES_FATAL_ERROR ERROR:  \r
- table "mono_postgres_test" does not exist\r
- <Stack Trace>\r
-\r
-                Create table with all supported types:\r
- OK\r
-                Insert values for all known types:\r
- OK\r
-                Update values:\r
- OK\r
-                Insert values for all known types:\r
- OK\r
- Aggregate: count(*)\r
- Agg Result: 2\r
- Aggregate: min(text_value)\r
- Agg Result: This is a text\r
- Aggregate: max(int4_value)\r
- Agg Result: 1048000\r
- Aggregate: sum(int4_value)\r
- Agg Result: 1048003\r
-                Select values from the database:\r
- Result is from a SELECT SQL Query.  Records Affected: -1\r
- Result Set 1...\r
-   Total Columns: 28\r
- ColumnName = boolean_value\r
- ColumnOrdinal = 1\r
- ColumnSize = 1\r
- NumericPrecision = 0\r
- NumericScale = 0\r
- IsUnique = False\r
- IsKey =\r
- BaseCatalogName =\r
- BaseColumnName = boolean_value\r
- BaseSchemaName =\r
- BaseTableName =\r
- DataType = System.Boolean\r
- AllowDBNull = False\r
- ProviderType = 16\r
- IsAliased = False\r
- IsExpression = False\r
- IsIdentity = False\r
- IsAutoIncrement = False\r
- IsRowVersion = False\r
- IsHidden = False\r
- IsLong = False\r
- IsReadOnly = False\r
-\r
- ...\r
-\r
- ColumnName = null_timestamp_value\r
- ColumnOrdinal = 28\r
- ColumnSize = 8\r
- NumericPrecision = 0\r
- NumericScale = 0\r
- IsUnique = False\r
- IsKey =\r
- BaseCatalogName =\r
- BaseColumnName = null_timestamp_value\r
- BaseSchemaName =\r
- BaseTableName =\r
- DataType = System.DateTime\r
- AllowDBNull = False\r
- ProviderType = 1184\r
- IsAliased = False\r
- IsExpression = False\r
- IsIdentity = False\r
- IsAutoIncrement = False\r
- IsRowVersion = False\r
- IsHidden = False\r
- IsLong = False\r
- IsReadOnly = False\r
-\r
- Gonna do a Read() now...\r
-   Row 0:\r
-    Col 0: boolean_value: False\r
-    Col 1: int2_value: 5\r
-    Col 2: int4_value: 3\r
-    Col 3: bigint_value: 9\r
-    Col 4: float_value: 3.141590\r
-    Col 5: double_value: 3.14159\r
-    Col 6: numeric_value: 123456789012.345\r
-    Col 7: char_value: Mono.Data!\r
-    Col 8: varchar_value: It was not me!\r
-    Col 9: text_value: We got data!\r
-    Col 10: point_value: (1,0)\r
-    Col 11: time_value: 01/01/1 21:13:14\r
-    Col 12: date_value: 02/29/2000 00:00:00\r
-    Col 13: timestamp_value: 02/29/2004 14:00:11\r
-    Col 14: null_boolean_value is NULL\r
-    Col 15: null_int2_value is NULL\r
-    Col 16: null_int4_value is NULL\r
-    Col 17: null_bigint_value is NULL\r
-    Col 18: null_float_value is NULL\r
-    Col 19: null_double_value is NULL\r
-    Col 20: null_numeric_value is NULL\r
-    Col 21: null_char_value is NULL\r
-    Col 22: null_varchar_value is NULL\r
-    Col 23: null_text_value is NULL\r
-    Col 24: null_point_value is NULL\r
-    Col 25: null_time_value is NULL\r
-    Col 26: null_date_value is NULL\r
-    Col 27: null_timestamp_value is NULL\r
-   Row 1:\r
-    Col 0: boolean_value: True\r
-    Col 1: int2_value: -22\r
-    Col 2: int4_value: 1048000\r
-    Col 3: bigint_value: 123456789012345\r
-    Col 4: float_value: 3.141590\r
-    Col 5: double_value: 3.14159\r
-    Col 6: numeric_value: 123456789012.345\r
-    Col 7: char_value: This is a char\r
-    Col 8: varchar_value: This is a varchar\r
-    Col 9: text_value: This is a text\r
-    Col 10: point_value: (1,0)\r
-    Col 11: time_value: 01/01/1 21:13:14\r
-    Col 12: date_value: 02/29/2000 00:00:00\r
-    Col 13: timestamp_value: 02/29/2004 14:00:11\r
-    Col 14: null_boolean_value is NULL\r
-    Col 15: null_int2_value is NULL\r
-    Col 16: null_int4_value is NULL\r
-    Col 17: null_bigint_value is NULL\r
-    Col 18: null_float_value is NULL\r
-    Col 19: null_double_value is NULL\r
-    Col 20: null_numeric_value is NULL\r
-    Col 21: null_char_value is NULL\r
-    Col 22: null_varchar_value is NULL\r
-    Col 23: null_text_value is NULL\r
-    Col 24: null_point_value is NULL\r
-    Col 25: null_time_value is NULL\r
-    Col 26: null_date_value is NULL\r
-    Col 27: null_timestamp_value is NULL\r
-   Total Rows Retrieved: 2\r
- Total Result sets: 1\r
-                Call ExecuteReader with a SQL Command. \r
-                (Not INSERT,UPDATE,DELETE\r
- ).\r
- Result is from a SQL Command not (INSERT,UPDATE,DELETE).  \r
-                        Records Affected: -1\r
- Total Result sets: 0\r
-                Call ExecuteReader with a SQL Command. \r
-                        (Is INSERT,UPDATE,DELETE)\r
- .\r
- Result is from a SQL Command (INSERT,UPDATE,DELETE).  Records Affected: 1\r
- Total Result sets: 0\r
-                Calling stored procedure version()\r
- Result: PostgreSQL 7.2.1 on i686-pc-cygwin, compiled by GCC 2.95.3-5\r
- Database Server Version: PostgreSQL 7.2.1 on i686-pc-cygwin, \r
-              compiled by GCC 2.9\r
- 5.3-5\r
- Clean up...\r
-                Drop table...\r
- OK\r
- RESULT: 0\r
-\r
-</pre>\r
-\r
+
+ danmorg@DANPC ~/mono/mcs/class/System.Data/Test
+ $ mcs PostgresTest.cs -r System.Data.dll
+
+ danmorg@DANPC ~/mono/mcs/class/System.Data/Test
+ $ mono PostgresTest.exe
+        Postgres provider specific tests...
+
+                Drop table:
+ Error (don't worry about this one)SqlError:PGRES_FATAL_ERROR ERROR:  
+ table "mono_postgres_test" does not exist
+ <Stack Trace>
+
+                Create table with all supported types:
+ OK
+                Insert values for all known types:
+ OK
+                Update values:
+ OK
+                Insert values for all known types:
+ OK
+ Aggregate: count(*)
+ Agg Result: 2
+ Aggregate: min(text_value)
+ Agg Result: This is a text
+ Aggregate: max(int4_value)
+ Agg Result: 1048000
+ Aggregate: sum(int4_value)
+ Agg Result: 1048003
+                Select values from the database:
+ Result is from a SELECT SQL Query.  Records Affected: -1
+ Result Set 1...
+   Total Columns: 28
+ ColumnName = boolean_value
+ ColumnOrdinal = 1
+ ColumnSize = 1
+ NumericPrecision = 0
+ NumericScale = 0
+ IsUnique = False
+ IsKey =
+ BaseCatalogName =
+ BaseColumnName = boolean_value
+ BaseSchemaName =
+ BaseTableName =
+ DataType = System.Boolean
+ AllowDBNull = False
+ ProviderType = 16
+ IsAliased = False
+ IsExpression = False
+ IsIdentity = False
+ IsAutoIncrement = False
+ IsRowVersion = False
+ IsHidden = False
+ IsLong = False
+ IsReadOnly = False
+
+ ...
+
+ ColumnName = null_timestamp_value
+ ColumnOrdinal = 28
+ ColumnSize = 8
+ NumericPrecision = 0
+ NumericScale = 0
+ IsUnique = False
+ IsKey =
+ BaseCatalogName =
+ BaseColumnName = null_timestamp_value
+ BaseSchemaName =
+ BaseTableName =
+ DataType = System.DateTime
+ AllowDBNull = False
+ ProviderType = 1184
+ IsAliased = False
+ IsExpression = False
+ IsIdentity = False
+ IsAutoIncrement = False
+ IsRowVersion = False
+ IsHidden = False
+ IsLong = False
+ IsReadOnly = False
+
+ Gonna do a Read() now...
+   Row 0:
+    Col 0: boolean_value: False
+    Col 1: int2_value: 5
+    Col 2: int4_value: 3
+    Col 3: bigint_value: 9
+    Col 4: float_value: 3.141590
+    Col 5: double_value: 3.14159
+    Col 6: numeric_value: 123456789012.345
+    Col 7: char_value: Mono.Data!
+    Col 8: varchar_value: It was not me!
+    Col 9: text_value: We got data!
+    Col 10: point_value: (1,0)
+    Col 11: time_value: 01/01/1 21:13:14
+    Col 12: date_value: 02/29/2000 00:00:00
+    Col 13: timestamp_value: 02/29/2004 14:00:11
+    Col 14: null_boolean_value is NULL
+    Col 15: null_int2_value is NULL
+    Col 16: null_int4_value is NULL
+    Col 17: null_bigint_value is NULL
+    Col 18: null_float_value is NULL
+    Col 19: null_double_value is NULL
+    Col 20: null_numeric_value is NULL
+    Col 21: null_char_value is NULL
+    Col 22: null_varchar_value is NULL
+    Col 23: null_text_value is NULL
+    Col 24: null_point_value is NULL
+    Col 25: null_time_value is NULL
+    Col 26: null_date_value is NULL
+    Col 27: null_timestamp_value is NULL
+   Row 1:
+    Col 0: boolean_value: True
+    Col 1: int2_value: -22
+    Col 2: int4_value: 1048000
+    Col 3: bigint_value: 123456789012345
+    Col 4: float_value: 3.141590
+    Col 5: double_value: 3.14159
+    Col 6: numeric_value: 123456789012.345
+    Col 7: char_value: This is a char
+    Col 8: varchar_value: This is a varchar
+    Col 9: text_value: This is a text
+    Col 10: point_value: (1,0)
+    Col 11: time_value: 01/01/1 21:13:14
+    Col 12: date_value: 02/29/2000 00:00:00
+    Col 13: timestamp_value: 02/29/2004 14:00:11
+    Col 14: null_boolean_value is NULL
+    Col 15: null_int2_value is NULL
+    Col 16: null_int4_value is NULL
+    Col 17: null_bigint_value is NULL
+    Col 18: null_float_value is NULL
+    Col 19: null_double_value is NULL
+    Col 20: null_numeric_value is NULL
+    Col 21: null_char_value is NULL
+    Col 22: null_varchar_value is NULL
+    Col 23: null_text_value is NULL
+    Col 24: null_point_value is NULL
+    Col 25: null_time_value is NULL
+    Col 26: null_date_value is NULL
+    Col 27: null_timestamp_value is NULL
+   Total Rows Retrieved: 2
+ Total Result sets: 1
+                Call ExecuteReader with a SQL Command. 
+                (Not INSERT,UPDATE,DELETE
+ ).
+ Result is from a SQL Command not (INSERT,UPDATE,DELETE).  
+                        Records Affected: -1
+ Total Result sets: 0
+                Call ExecuteReader with a SQL Command. 
+                        (Is INSERT,UPDATE,DELETE)
+ .
+ Result is from a SQL Command (INSERT,UPDATE,DELETE).  Records Affected: 1
+ Total Result sets: 0
+                Calling stored procedure version()
+ Result: PostgreSQL 7.2.1 on i686-pc-cygwin, compiled by GCC 2.95.3-5
+ Database Server Version: PostgreSQL 7.2.1 on i686-pc-cygwin, 
+              compiled by GCC 2.9
+ 5.3-5
+ Clean up...
+                Drop table...
+ OK
+ RESULT: 0
+
+</pre>
+
+* Action Plan
+
+       <p>Eventually replace the PostgreSQL data provider in Mono
+       with <a href="http://gborg.postgresql.org/project/npgsql/projdisplay.php">Npgsql</a>.
+       Npgsql is a .Net Data Provider for PostgreSQL which implements 
+       the <a href="http://developer.postgresql.org/docs/postgres/protocol.html">PostgreSQL Frontend/Backend Protocol</a>.
+       Npgsql is implemented in 100% C#.  This provider was created by Francisco Figueiredo jr.
+       and has many programmers developing the provider.
diff --git a/doc/sqlclient b/doc/sqlclient
new file mode 100755 (executable)
index 0000000..f73ba3e
--- /dev/null
@@ -0,0 +1,58 @@
+* Microsoft SQL Server Provider
+
+<ul>
+       <li>ADO.NET Provider for Microsoft SQL Server 7/2000 databases
+
+       <li>Exists in namespace System.Data.SqlClient and assembly System.Data
+       
+       <li>Created by Tim Coleman
+       
+       <li>Used the <a href="http://www.freetds.org/">FreeTDS</a> and 
+       <a href="http://jtds.sourceforge.net/">jTDS</a> projects as resources.
+       
+       <li>Implemented in 100% C#
+       
+       <li>Is similar to the Mono.Data.TdsClient and Mono.Data.SybaseClient providers.
+</ul>
+
+* Current Status
+       
+<ul>
+       <li>Able to connect to Microsoft SQL Server 7/2000 databases
+       
+       <li>Connection pooling works.
+       
+       <li>Stored Procedures work
+       
+       <li>Parameters work.  
+       
+       <li>Prepare works.
+       
+       <li>SQL commands can be executed
+       via ExecuteNonQuery() of a SqlCommand.
+       
+       <li>SQL aggregates can be executed and a single row and single column
+       result can be retrieved via ExecuteScalar() of a SqlCommand
+       
+       <li>SQL queries can be executed via ExecuteReader() and results 
+       can be retrieved via SqlDataReader.
+       
+       <li>a DataTable with schema info about a result can be gotten via GetSchemaTable()
+       in a SqlDataReader
+       
+       <li>XML can be read via ExecuteXmlReader in a SqlCommand.
+       
+       <li>Data can be filled in a DataTable in a DataSet via a SqlDataAdapter
+       
+       <li>Uses TDS Protocol Version 7.0
+       
+       <li><a href="http://www.go-mono.com/tds-providers.html">Design of the Microsoft SQL Server, Sybase, and TDS Providers in Mono</a>
+</ul>
+
+* Action plan
+
+<ul>
+       <li>Connection timeouts is being developed now.
+
+       <li>TODO
+</ul>
diff --git a/doc/sqlite b/doc/sqlite
new file mode 100755 (executable)
index 0000000..07312db
--- /dev/null
@@ -0,0 +1,28 @@
+* SQL Lite Data Provider
+
+<ul>
+       <li>Exists in namespace and assembly Mono.Data.SqliteClient
+       
+       <li>Created by Vladimir Vukicevic
+       
+       <li><a href"http://www.hwaci.com/sw/sqlite/download.html">SQL Lite</a>
+       binaries exist for Linux and Windows.  sqlite.dll on Windows 
+       and sqlite.so on Linux.
+</ul>
+
+* Current Status
+
+<ul>
+       <li>Able to connect, execute commands, and retrieve data...
+       
+       <li>Works in mPhoto
+</ul>
+
+* Action Plan
+
+<ul>
+       <li>Create a DataAdapter for SQL Lite named SqliteDataAdapter that can be used to 
+       Fill a DataTable in a DataSet
+       
+       <li>TODO
+</ul>
diff --git a/doc/sybase b/doc/sybase
new file mode 100755 (executable)
index 0000000..6a165fa
--- /dev/null
@@ -0,0 +1,48 @@
+* Sybase Data Provider
+
+<ul>
+       <li>ADO.NET Provider for Sybase SQL Server databases
+
+       <li>Exists in namespace Mono.Data.SybaseClient and assembly Mono.Data.SybaseClient
+       
+       <li>Created by Tim Coleman
+       
+       <li>Used the <a href="http://www.freetds.org/">FreeTDS</a> and 
+       <a href="http://jtds.sourceforge.net/">jTDS</a> projects as resources.
+       
+       <li>Implemented in 100% C#
+       
+       <li>Is similar to the Mono.Data.TdsClient and System.Data.SqlClient providers.
+       
+       <li>Uses TDS Protocol Version 5.0
+       
+       <li><a href="http://www.go-mono.com/tds-providers.html">Design of the Microsoft SQL Server, Sybase, and TDS Providers in Mono</a>
+</ul>
+
+* Current Status
+       
+<ul>   
+       <li>Able to connect to Sybase databases
+       
+       <li>SQL commands can be executed
+       via ExecuteNonQuery() of a SybaseCommand.
+       
+       <li>SQL aggregates can be executed and a single row and single column
+       result can be retrieved via ExecuteScalar() of a SybaseCommand
+       
+       <li>SQL queries can be executed via ExecuteReader() and results 
+       can be retrieved via SybaseDataReader.
+       
+       <li>a DataTable with schema info about a result can be gotten via GetSchemaTable()
+       in a SybaseDataReader
+       
+       <li>Data can be filled in a DataTable in a DataSet via a SybaseDataAdapter
+</ul>
+
+* Action plan
+
+<ul>
+       <li>Connection timeouts is being developed now.
+
+       <li>TODO
+</ul>
index e281ef1845661ec0dd4380d214b3dd775f7f5800..6442e69601aefb040f7b2c2673780fc7747a4184 100644 (file)
@@ -1,10 +1,10 @@
-* Design of the Microsoft SQL Server, Sybase, and TDS Providers in Mono
+* Design of the Microsoft SQL Server, Sybase, and TDS Data Providers in Mono
 
        <ul>
                * After much discussion among the Mono ADO.NET developers,
-                 we have come up with the design of implementing a Sybase and Microsoft 
-                 SQL Server ADO.NET provider.  We have already begun implementing 
-                 this design in Mono.
+                 we have come up with the design of implementing a Sybase, Microsoft 
+                 SQL Server, and TDS Generic ADO.NET providers.  These providers have
+                 been created and are actively developed by Tim Coleman.
 
                * Since Sybase and Microsoft SQL Server databases both 
                  use the TDS protocol for data access, and other implementations 
                <ol>
                  <li><p>Mono.Data.SybaseClient namepace and assembly will 
                  hold the ADO.NET provider for Sybase SQL Server database.  
-                 This provider will default to using TDS version 5.0 which 
-                 can only be used with  Sybase.
+                 This provider uses TDS version 5.0 which 
+                 can only be used with Sybase databases.
 
                  <li><p>System.Data.SqlClient namespace and System.Data assembly 
                  will hold the ADO.NET provider
-          for Microsoft SQL Server 7.0/2000 databases.  This is to be 
-          compatible with Microsoft .NET
-          This provider will default to using TDS version 7.0 
-          which only supports Microsoft SQL Server 7.0/2000 just like 
-          SqlClient in Microsoft .NET does.  There is TDS version of 8.0 
+          for Microsoft SQL Server 7.0/2000 databases.  This provider is to be 
+          compatible with SqlClient in Microsoft .NET and uses TDS version 7.0 
+          which only supports Microsoft SQL Server 7.0/2000.  
+          There is TDS version 8.0 
           which we will need to support as well, but it is used for 
           Microsoft SQL Server 2000 databases.
 
-                 <li><p>Mono.Data.TdsClient namespace and assembly is not 
-                 meant to be an ADO.NET provider in Mono, but a means to 
-                 provide generic unit tests for the TDS functionality shared by the SqlClient 
-                 and SybaseClient providers.  This provider will default to 
+                 <li><p>Mono.Data.TdsClient namespace and assembly is a generic 
+                 provider for older TDS databases.  This provider will default to 
                  using TDS version 4.2 which can be used by older Sybase and 
                  Microsoft SQL Server databases.
                 </ol>
diff --git a/doc/tdsclient b/doc/tdsclient
new file mode 100755 (executable)
index 0000000..c6fcafb
--- /dev/null
@@ -0,0 +1,51 @@
+* TDS Generic Provider
+
+<ul>
+       <li>ADO.NET Provider for older Sybase and Microsoft SQL Server databases
+
+       <li>Exists in namespace Mono.Data.TdsClient and assembly Mono.Data.TdsClient
+       
+       <li>Created by Tim Coleman
+       
+       <li>Used the <a href="http://www.freetds.org/">FreeTDS</a> and 
+       <a href="http://jtds.sourceforge.net/">jTDS</a> projects as resources.
+       
+       <li>Implemented in 100% C#
+       
+       <li>Is similar to the Mono.Data.SybaseClient and System.Data.SqlClient providers.
+       
+       <li>Uses TDS Protocol Version 4.2 by default
+       
+       <li><a href="http://www.go-mono.com/tds-providers.html">Design of the Microsoft SQL Server, Sybase, and TDS Providers in Mono</a>
+</ul>
+
+* Current Status
+
+<ul>
+       <li>Only builds on Windows currently due to mcs does not support modules and mcs
+       has problems with code that is internal.
+       
+       <li>Able to connect to Microsoft SQL Server and Sybase databases
+       
+       <li>SQL commands can be executed
+       via ExecuteNonQuery() of a TdsCommand.
+       
+       <li>SQL aggregates can be executed and a single row and single column
+       result can be retrieved via ExecuteScalar() of a TdsCommand
+       
+       <li>SQL queries can be executed via ExecuteReader() and results 
+       can be retrieved via TdsDataReader.
+       
+       <li>a DataTable with schema info about a result can be gotten via GetSchemaTable()
+       in a TdsDataReader
+       
+       <li>Data can be filled in a DataTable in a DataSet via a TdsDataAdapter
+</ul>
+
+* Action plan
+
+<ul>
+       <li>Connection timeouts is being developed now.
+
+       <li>TODO
+</ul>
index 908b5332888d4a3cac8b7f4a5590ee978cfe448f..17e431f80567420f12894d7076877efaccf7c744 100644 (file)
 1,HOWTO,mono-contribution-howto.html,mono-contribution-howto.src
 0,Plans,plans.html,plans.src
 1,ADO.NET,ado-net.html,ado-net.src
+2,Firebird Interbase,firebird.html,firebird.src
+2,Microsft SQL Server,sqlclient.html,sqlclient.src
+2,MySQL,mysql.html,mysql.src
+2,ODBC,odbc.html,odbc.src
+2,OLE DB,oledb.html,oledb.src
 2,PostgreSQL,postgresql.html,postgresql.src
-2,SqlClient,tds-providers.html,tds-providers.src
+2,SQL Lite,sqlite.html,sqlite.src
+2,Sybase,sybase.html,sybase.src
+2,TDS Generic,tdsclient.html,tdsclient.src
 1,ASP.NET,asp-net.html,asp-net.src
 1,Java,java.html,java.src
 1,Windows.Forms,winforms.html,winforms.src
index aa48fee571c6268179b2183ff6c1aa73e64daa57..3140b9ca04d793b960f114a98f049e78aa253d5b 100644 (file)
@@ -5,8 +5,15 @@ CORCOMPARE=../../../mcs/tools/corcompare
 
 OBJECTS=       \
        deploy/ado-net.html                                     \
+               deploy/firebird.html                    \
+               deploy/mysql.html                               \
+               deploy/odbc.html                                \
+               deploy/oledb.html                               \
                deploy/postgresql.html                  \
-               deploy/tds-providers.html               \
+               deploy/sqlclient.html                   \
+               deploy/sqlite.html                              \
+               deploy/sybase.html                              \
+               deploy/tdsclient.html                   \
        deploy/anoncvs.html                                     \
        deploy/asp-net.html                                     \
        deploy/books.html                                       \
index c5cd420829b16dc3f654ab15c3fa57e427f93230..6eced795105fd3631af4061c4d5bb94ea10f2695 100644 (file)
 
 * Action plan
 
-       The current plan to implement ADO.NET is as follows:
-
-       <b>Step 1:</b><a href="http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemDataOleDb.asp?frame=true">System.Data.OleDb</a> Provider:
-               
-       <ul>
-               * <p>On Unix systems: System.Data.OleDb uses the
-               <a href="http://www.gnome-db.org/">LibGDA</a>
-                engine.   This provider was started by Rodrigo Moya and Tim Coleman.
-
-                 <p>LibGDA is a data access engine like ADO/OLE-DB, but for Unix.  The 
-                 GDA in libGDA stands for GNU/GNOME Data Access, but it does not require GNOME.
-                 It only requires glib2 and libxml2.  LibGDA is used by 
-                 libgnomedb, GNOME-DB, and gaSQL.  glib2 and libxml2 both work on Linux
-                 and Windows.
-                 
-                 <p>There is work under way to get libgda working under 
-                 Windows using Cygwin by the GNOME-DB developers, but we have not
-                 been successful yet.
-                 
-                 <p>LibGDA has providers for 
-                 <a href="http://www.mysql.com/">MySQL</a>, 
-                 <a href="http://www.postgresql.org/">PostgreSQL</a>, 
-                 XML, 
-                 ODBC (via <a href="http://www.unixodbc.org/">unixODBC</a>),
-                 <a href="http://www.oracle.com/">Oracle</a>, 
-                 <a href="http://www.borland.com/products/downloads/download_interbase.html">Interbase</a>, 
-                 <a href="http://www.sybase.com/downloads">Sybase</a> and 
-                 <a href="http://www.microsoft.com/sql/default.asp">Microsoft SQL Server</a> (
-                 via <a href="http://www.freetds.org/">FreeTDS</a>), 
-                 <a href="http://www-3.ibm.com/software/data/db2/">IBM DB2 Universal Database</a>,
-                 <a href="http://www.hwaci.com/sw/sqlite/download.html">SQL Lite</a>,
-                 and <a href="http://www.microsoft.com/office/access/default.asp">MS Access</a> 
-                 (via <a href="http://mdbtools.sourceforge.net/">MDB Tools</a>).
-                 
-       </ul>
-
-       <b>Step 2:</b> <a href="http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemdatasqlclient.asp?frame=true">System.Data.SqlClient</a> Provider:
+       <p>The current plan to implement ADO.NET is as follows:
 
        <ul>
-               * <p>System.Data.SqlClient will become a
-                 provider for Microsoft SQL Server, both on Windows and
-                 Linux, to be compatible with applications written
-                 for the Microsoft .NET Development Framework.
-
-               * <p>The <a href="http://wwww.go-mono.com/tds-providers.html">SqlClient and SybaseClient Design</a>
-                 states that System.Data.SqlClient will be written completely in
-                 C#.  FreeTDS and jTDS projects will be used as references on how to
-                 implement the TDS protocol.  SqlClient will use common internal code with SybaseClient
-                 and TdsClient.
-         
-               * <p><a href="http://www.freetds.org/">FreeTDS</a> 
-                 is a collection of free native C libraries: tds, dblib, 
-                 and ctlib for accessing TDS protocol databases like
-                 Microsoft SQL Server and Sybase.
-                 
-               * <p><a href="http://jtds.sf.net/">jTDS</a> 
-                 is a 100% Java JDBC Provider implementing the TDS protocol
-                 which allows data access to Microsoft SQL Server and
-                 Sybase databases.       
-                 
-       </ul>
-
-       <b>Step 3:</b> <a href="http://msdn.microsoft.com/downloads/sample.asp?url=/MSDN-FILES/027/001/668/msdncompositedoc.xml&frame=true">System.Data.Odbc</a> Provider:
-       
-       <ul>
-               * An ADO.NET Provider for ODBC has been created in
-                 System.Data.Odbc by Brian Ritchie for those using ODBC.
-                 
-               * <p>On Unix, the provider uses <a href="http://www.unixodbc.org/">unixODBC</a> 
-                 for its ODBC connectivity.  The ODBC provider uses the libodbc.dll that
-                 comes with unixODBC.  
-                 
-                 <p>There is an alternative to unixODBC, <a href="http://www.iodbc.org/">iODBC</a>, 
-                 but it has not been tested with the ODBC provider.
+               <li>Either create ADO.NET providers or modify pre-exiting ADO.NET providers to
+               work with Mono
                
-               * On Windows, the provider uses the native ODBC libraries (odbc32.dll) that comes 
-                 with Windows since unixODBC is supposed to be compatible with that.
-                 If you do not have odbc32.dll on Windows, get the latest MDAC 
-                 from Microsoft.  
-                 
-               * <p>The mapping between these native shared libraries is handled 
-                 in etc/mono/config
-                 
-                 <p>In mono cvs, the file is mono/data/config.in                         
-                 
-                 <p>unixODBC has providers for:
-                 Oracle, Microsoft SQL Server and Sybase (via FreeTDS), 
-                 MySQL, PostgreSQL, Informix, IBM DB2 Universal Database, 
-                 Interbase, miniSQL (mSQL), AdabasD, Empress, Ingres, Sap DB, and others.
-                 
-       </ul>
-
-       <b>Step 4:</b> Other ADO.NET providers:
-
-       <p>The idea in Microsoft .NET System.Data is to have
-                 a managed provider for each supported DBMS.
-                 
-                 <ul>
-                 
-                 <li><p>System.Data.SqlClient for Microsoft SQL Server.  See the
-                 Mono.Data.TdsClient provider.
-                 
-                 <li><p>Mono.Data.TdsClient for older Microsoft SQL Server
-                 and Sybase databases.  This has been started by Tim Coleman
-                 and will provide the functionality for System.Data.SqlClient
-                 and Mono.Data.SybaseClient.
+               <ul>
+                       <li>Create ADO.NET Providers
+                       
+                       <ul>
+                                       <li><a href="http://www.go-mono.com/mysql.html">MySQL</a>
+                                       <li><a href="http://www.go-mono.com/odbc.html">ODBC</a>
+                                       <li><a href="http://www.go-mono.com/oledb.html">OLE DB</a>
+                                       <li><a href="http://www.go-mono.com/postgresql.html">PostgreSQL</a>
+                                       <li><a href="http://www.go-mono.com/sqlclient.html">Microsoft SQL Server</a>
+                                       <li><a href="http://www.go-mono.com/sqlite.html">SQL Lite</a>
+                                       <li><a href="http://www.go-mono.com/sybase.html">Sybase</a>
+                                       <li><a href="http://www.go-mono.com/tdsclient.html">TDS Generic</a>
+                                       <li>Providers which we do not have, but we would like to have.  Currently,
+                                       some of these databases are supported via the ODBC or OLEDB providers.
+                                       <ul>
+                                               <li><a href="http://www-3.ibm.com/software/data/db2/">IBM DB2 Universal Database</a>
+                                               <li>miniSQL
+                                               <li><a href="http://www.oracle.com/">Oracle</a> - could be done by creating C# bindings to OCI (Oracle C Call Level Interface)
+                                               <li>BerkeleyDB (Sleepycat)
+                                               <li><a href="http://www.sapdb.org/">SapDB</a>
+                                               <li>Microsoft Access - could be done by creating C# bindings to <a href="http://mdbtools.sourceforge.net">MDB Tools</a>
+                                               <li>dbase or xbase type database files
+                                               <li>Others, of course, are welcomed...
                  
-                 <li><p>Mono.Data.SybaseClient for Sybase SQL Server.  See the
-                 Mono.Data.TdsClient provider.
-                         
-                 <li><p>Mono.Data.PostgreSqlClient for PostgreSQL.  Started by
-                 Rodrigo Moya, Daniel Morgan, and Tim Coleman.  This provider 
-                 uses the PostgreSQL C API (libpq.so on Linux and pq.dll on
-                 Windows).
-          
-          <li><p>Mono.Data.MySql for MySQL client/server database.  Started by
-          Daniel Morgan using C# Bindings to MySQL from Brad Meril.  
-          This provider uses the MySQL C API (libmysqlclient.so on
-          Linux and libmySQL.dll on Windows).
-          
-          <li><p>Mono.Data.SqliteClient for the SQL Lite database.  Started by
-          Vladimir Vukicevic.  This provider uses 
-          <a href"http://www.hwaci.com/sw/sqlite/download.html">SQL Lite</a> database engine.
-          It is used in mPhoto.
-          
-          </ul>
-          
-          <p>See Current Status for more information on these providers.
-          
-                 <p>Some providers we would like to have are
-                 Mono.Data.DB2, Mono.Data.miniSQL,  
-                 System.Data.OracleClient, Mono.Data.Interbase,
-                 Mono.Data.Berkeley, and SapDB.
-                 Others, of course, are welcomed.
-                                 
-       </ul>
-
-       <b>Step 5:</b> Create tools for ADO.NET
-
+                                       </ul>
+                               </ul>
+                               <br>
+                       <li>Modify Pre-existing ADO.NET Providers to work with Mono.  This may
+                       require fixing or implementing areas of Mono too.
+                               <ul>
+                                       <li><a href="http://www.go-mono.com/firebird.html">Firebird Interbase</a>
+                                       <li><a href="http://gborg.postgresql.org/project/npgsql/projdisplay.php">Npgsql</a> a PostgreSQL provider
+                                       written in 100% C#
+                                       <li><a href="http://sourceforge.net/projects/mysqldrivercs/">MySQLDriverCS</a> is a MySQL provider written in C#
+                                       <li><a href="http://sourceforge.net/projects/mysqlnet/">MySQLNet</a> is a MySQL Manager provider written in C#
+                               </ul>
+               </ul>
+       <br>
+       <li>Create Tools for Configuration, Testing, and Entering SQL Queries  
        <ul>
-               * <p><b>SQL# CLI - a command-line tool</b> to execute SQL commands,
+               <li><b>SQL# CLI - a command-line tool</b> to execute SQL commands,
                  test connection strings, and connect to various ADO.NET
-                 providers in Mono.  The SQL# CLI has been started on and can be found in 
+                 providers in Mono.  The SQL# CLI can be found in
                  mcs/tools/SqlSharp/SqlSharpCli.cs
                  It is written in C# and runs on Mono and .NET
 
-               * <p><b>SQL# GUI - a GUI tool</b> to execute SQL commands.  This
-                 has not been started.  The idea is to use the GnomeDbSqlEditor,
-                 GnomeDbBrowser, and GnomeDbGrid gtk+ widgets that exists 
-                 in libgnomedb# that is part of gtk#.  However, we could base it
-                 on System.Windows.Forms, but System.Windows.Forms in Mono 
-                 is not as complete as gtk#.  
-               
-          <p>libgnomedb uses libgda for its data model and data access capabilities and
-          can be found <a href="http://www.gnome-db.org/">here</a>.  libgnomedb#
-          and gda# are part of <a href="http://gtk-sharp.sourceforge.net/">gtk#</a>
-          libgnomedb# is the C# bindings to libgnomedb which is a gtk+ GUI 
-          widget library for data access.       
-          gda# is the C# bindings to libgda which is a generic data access
-          library that has providers for many databases.
+               <li><p><b>SQL# GUI - a GUI tool</b> to execute SQL commands. 
+                 Currently, there is SQL# For GTK# which
+                 can be found at 
+                 mcs/tools/SqlSharp/gui/gtk-sharp.  It has a SQL editor with 
+                 syntax hi lighting of SQL keywords
           
-               * <p><b>Configuration Command-Line and GUI Tools for ADO.NET</b>.  
-                 These tools have
-                 not been started.  They could become a part of SQL# though.  The
-                 configuration tool can be used to set up DSNs for the ODBC and OLE-DB
-                 providers and configurations for 
-                 their underlying libraries (unixODBC and libgda). The configuration
-                 tool could set database client library configurations too, such as,
-                 freetds.conf for Microsoft SQL Server and Sybase, 
-                 The tools would be written in C# and run on Mono.
+               <li><b>Configuration Command-Line and GUI Tools for ADO.NET</b>.  
+                 These tools have not been started.  The tools would be written in
+                 C# and run on Mono. The
+                 configuration tool can be used to do the following:
+                 <ul> 
+                       <li>setup DSNs for the ODBC and OLE-DB
+                               providers and configurations for 
+                               their underlying libraries (unixODBC and libgda)
+                   <li>setup configurations for the Mono.Data.ProviderFactory
+                               that Brian Ritchie created
+                   <li>setup native database client library configurations too, such as,
+                               freetds.conf for Microsoft SQL Server and Sybase
+                 </ul>
                
        </ul>
+</ul>
        
 * Current Status
-       
-       <p>The <b>PostgreSQL</b> provider in Mono.Data.PostgreSqlClient can connect, 
-       execute commands, retrieve data via a Data Reader, read data in a DataTable 
-       in a DataSet via a Data Adapter, get a DataTable holding schema data,
-       and use input parameters in its SQL, and SQL errors and exceptions for PostgreSQL
-       are working.
-               
-       <p><b>System.Data.OleDb</b> is working with libgda (an OLE-DB/ADO data access for Unix).  
-       The C-Sharp bindings to libgda currently work - meaning they can compile, run, and you can connect to a
-       PostgreSQL database via libgda via the C-Sharp bindings to libgda.  Basic
-       functionality (execution of commands, data retrieval, transactions, etc) are
-       now working. Current focus is on filling up the missing pieces (Data adapters
-       mainly) and schema support.  We need help building libgda on Windows though.  libgda
-       builds find on linux though.  An inital implementation of GetSchemaTable() for
-       the OleDbDataReader has been checked into cvs.  GetSchemaTable() isn't correct for OleDb,
-       but the foundation is there.
-       
-       <p>Tim Coleman has just started on the <b>TDS</b> protocol support neccessary for the
-       <b>SqlClient, SybaseClient, and TdsClient</b> providers. The provider will be 
-       implemented in pure managed C#.  We are using FreeTDS and jTDS as references.  
-       The TDS provider will exist     in Mono.Data.TdsClient.  
-       The System.Data.SqlClient and Mono.Data.SybaseClient will
-       be based off of Mono.Data.TdsClient provider.  Currently, we are providing
-       the foundation for the TdsClient provider.  Next step is to implement the TDS
-       protocol in C#.
-       
-       <p><b>ODBC</b> support has been started by Brian Ritchie.\r
-       It uses unixODBC on Linux and uses native ODBC support on Windows.\r
-       There is basic implementations of \r
-    OdbcConnection, OdbcCommand, OdbcDataReader, OdbcParameter, and \r
-    OdbcParameterCollection.  The provider can execute queries and display result sets \r
-    (and ExecuteNonQuery too).  Currently, developers are working on the Parameter & \r
-    Transaction support.  It was tested on Debian against a DB2 7.2 UDB.  It was\r
-    also tested on Windows XP against a Microsoft SQL Server 2000 database.\r
-       
-       <p><b>Mono.Data.MySql</b> is an ADO.NET provider for 
-       the <b>MySQL</b> client/server database management system
-       that uses the MySQL C Client Library.   Currently, we can connect, 
-       execute simple commands, and
-       retrieve results using a data reader.  A schema DataTable has been partially 
-       implemented which is returned from GetSchemaTable() in MySqlDataReader.
-       The shared client libraries 
-       between windows version and linux are different: windows has libmySQL.dll 
-       while linux has libmysqlclient.so.  This is handled by the 
-       file etc/mono/config which is mapped by the mono runtime in knowing
-       which native shared library to load.  In cvs, this file is mono/config.in and
-       can be modified with a text editor.  
-       The C# Bindings to MySQL are thanks to Brad Meril.
 
-       <p><b>Mono.Data.SqliteClient</b> is an ADO.NET provider for
-       the <a href"http://www.hwaci.com/sw/sqlite/download.html">SQL Lite</a>
-       database.  There is SQL Lite binaries for Linux and Windows.  sqlite.dll on Windows 
-       and sqlite.so on Linux. The SQL Lite proivder
-       was contributed by Vladimir Vukicevic.
+       <p>Variouls ADO.NET Providers have been created: PostgreSQL, MySQL, Sybase, SQL Lite,
+       Microsoft SQL Server, OLE DB, ODBC, and TDS Generic.  See their respective web page for
+       more information.
                
        <p><b>DataSet, DataAdaptor, DataTable, DataRelation, DataRow, DataColumn,
        DataColumnCollection, DataRowCollection, and others</b> need more work.  There are
        GnomeDbSqlEditor, GnomeDbList, GnomeDbLogin, GnomeDbReportEditor, GnomeDbTableEditor, 
        GnomeDbCombo, and GnomeDbForm.  Rodrigo Moya is the best person to contact.
                
-       <p><b>XML support in System.Data</b> needs to be started.  This involves working on
+       <p><b>XML support in System.Data</b> needs work.  This involves working on
        the classes: DataSet, XmlDataDocument, and the method ExecuteXmlReader() that
        exists in a provider's class that implements IDbCommand, and others.
+       Stuart Caborn has started the XML support in a DataSet.  Tim Coleman started
+       XML support in the ExecuteXmlReader() in a SqlCommand.
        
-       <p><b>ADO.NET Multiplexor Provider</b> needs to be created.  This is not
+       <p><b>ADO.NET Provider Factory</b> has been started by Brian Ritchie.  The 
+       Provider Factory is used to dynamically create data provider
+       connections and data adapters based on configuration information.  This
+       provider factory can also provide utility functions needed by a lot of 
+       providers but are not exposed via the provider.
+       
+       <p><b>ADO.NET Multiplexor Provider</b> needs to be created.  It can use the
+       ADO.NET Provider Factory to create its connections and adapters, but the
+       Multiplexor Provider is a Generic Provider that internally uses an existing
+       provider based on configuration options.  This is not
        part of Microsoft .NET, but it needs to be able to run on Microsoft .NET
        and Mono.  This provider can be a generic provider, much like the ODBC.NET and
        OLEDB.NET providers are, but be written in 100% C# and be configurable via
        a configuration file.  This provider will multiplex to other providers
        that exist.  If one does not exist for a given DBMS, 
-       default to the ODBC or OLEDB .NET provider.  Or it could be a class
-       that its sole duty is to dynamically create a provider's Connection class
-       based on a configuration file.  It can provide some utility functions as
-       well that can be used in all or most of the providers, such as, what
-       parameter marker character should be used: a colon, at, question mark,
-       or square brackets.
+       default to the ODBC or OLEDB .NET provider.  
        
-       <p>According to Gonzalo, this is how it could be implemented:
-\r
-       <p>After some work done in System.Configuration, you can now do something\r
-    like:   \r
-\r
-       <p>\r
- <pre>\r
- // Get an instance of the multiplexor from machine.config file\r
- // Can be overriden in the application config file    \r
- object o = ConnectionSettings.GetConfig \r
-               ("mono.data/multiplexor");\r
- if (o == null)\r
-       --- error\r
-    \r
- Multiplexor mp = (Multiplexor) o;\r
-    \r
- // may be a string [] argument can help passing arguments\r
- IDbConnection cnc = mp.CreateConnection (providerName);\r
-</pre>    \r
-\r
-       <p>and in the machine.config file:\r
-\r
-<pre>\r
-  &lt;configuration&gt;\r
-   &lt;configSections&gt;\r
-    &lt;section name="mono.data"\r
-      type="Mono.Data.MultiplexorSectionHandler,Mono.Data"/&gt;\r
-    ....\r
-   &lt;/configSections>\r
-   ...\r
-   &lt;sectionGroup name="mono.data"&gt;\r
-     &lt;multiplexor&gt;\r
-       &lt;add provider="PostgreSQL" \r
-          type="Mono.Data.PostgreSQLClient,Mono.Data"\r
-          validate="false" \r
-          parameters="USER=xxx;HOST=127.0.0.1;DBNAME=xxx"/&gt;\r
-     &lt;/multiplexor&gt;\r
-   &lt;/sectionGroup&gt;\r
-  &lt;/configuration&gt;\r
-</pre>\r
-\r
-       <p>validate="false" tells MultiplexorSectionHandler not to load the Type\r
-       until an instance is required. You can add more attributes or whatever\r
-       inside <multiplexor> as long as MultiplexorSectionHandler parses it.\r
-\r
-<pre>\r
-public class MultiplexorSectionHandler :\r
-IConfigurationSectionHandler\r
-{\r
-    public object Create (object parent, \r
-      object configContext,\r
-      XmlNode section)\r
-    {\r
-       Multiplexor mp;\r
-       // Here you get the ChildNodes and \r
-       // set up a Multiplexor\r
-       // instance that will hold the information \r
-       // needed to create \r
-       // instances of each provider. Only one \r
-       // instance will be \r
-       // created by the config system.\r
-            return mp;\r
-    }\r
- }\r
-</pre>\r
-       <p>This way, if our providers works with MS, the user can test them in both\r
-       MS and mono by just adding a few lines to machine.config (i still have\r
-       to upload a default machine.config file for mono). And this is the .NET\r
-       way of doing it (of course, if you prefer, you can use the other config\r
-       file. I just wanted to make people aware of this feature that now works\r
-       on mono).\r
+       <p>According to Gonzalo, this is how the configuration could be implemented for
+       the Provider Factory and Multiplexor Provider.
+
+       <p>After some work done in System.Configuration, you can now do something
+    like:   
+
+       <p>
+ <pre>
+ // Get an instance of the multiplexor from machine.config file
+ // Can be overriden in the application config file    
+ object o = ConnectionSettings.GetConfig 
+               ("mono.data/multiplexor");
+ if (o == null)
+       --- error
+    
+ Multiplexor mp = (Multiplexor) o;
+    
+ // may be a string [] argument can help passing arguments
+ IDbConnection cnc = mp.CreateConnection (providerName);
+</pre>    
+
+       <p>and in the machine.config file:
+
+<pre>
+  &lt;configuration&gt;
+   &lt;configSections&gt;
+    &lt;section name="mono.data"
+      type="Mono.Data.MultiplexorSectionHandler,Mono.Data"/&gt;
+    ....
+   &lt;/configSections>
+   ...
+   &lt;sectionGroup name="mono.data"&gt;
+     &lt;multiplexor&gt;
+       &lt;add provider="PostgreSQL" 
+          type="Mono.Data.PostgreSQLClient,Mono.Data"
+          validate="false" 
+          parameters="USER=xxx;HOST=127.0.0.1;DBNAME=xxx"/&gt;
+     &lt;/multiplexor&gt;
+   &lt;/sectionGroup&gt;
+  &lt;/configuration&gt;
+</pre>
+
+       <p>validate="false" tells MultiplexorSectionHandler not to load the Type
+       until an instance is required. You can add more attributes or whatever
+       inside <multiplexor> as long as MultiplexorSectionHandler parses it.
+
+<pre>
+public class MultiplexorSectionHandler :
+IConfigurationSectionHandler
+{
+    public object Create (object parent, 
+      object configContext,
+      XmlNode section)
+    {
+       Multiplexor mp;
+       // Here you get the ChildNodes and 
+       // set up a Multiplexor
+       // instance that will hold the information 
+       // needed to create 
+       // instances of each provider. Only one 
+       // instance will be 
+       // created by the config system.
+            return mp;
+    }
+ }
+</pre>
+       <p>This way, if our providers works with MS, the user can test them in both
+       MS and mono by just adding a few lines to machine.config (i still have
+       to upload a default machine.config file for mono). And this is the .NET
+       way of doing it (of course, if you prefer, you can use the other config
+       file. I just wanted to make people aware of this feature that now works
+       on mono).
        
        <p><b>Building System.Data</b>
        
diff --git a/web/firebird b/web/firebird
new file mode 100755 (executable)
index 0000000..035e229
--- /dev/null
@@ -0,0 +1,37 @@
+* Firebird and Interbase Data Provider
+
+<ul>
+       <li>Does not exist in Mono, but is a separate project
+       
+       <li><a href="http://sourceforge.net/projects/firebase-net/">Firebird and Interbase
+       Data Provider</a> for Microsoft .NET and Mono
+       
+       <li><a href="http://firebird.sourceforge.net/index.php">Firebird Relational Database</a> is 
+       an independent project which uses source code based on the Interbase source code released
+       by Borland under the Interbase Public License.
+</ul>
+
+* Current Status
+
+<ul>
+       <li>Currently, it is able to connect to Firebird and Interbase databases 
+          and execute commands
+          
+       <li>The new data
+ provider/driver is written in C# and provides a high-performance native
+ implementation of the GDS32/API functions. This means that .Net developers
+ will be able to access Firebird databases without the need of Firebird
+ client install. In support of the new module, a new mailing list
+ "firebird-net-provider" has been created. Please use this list for any 
+ questions that you may have about the provider. This provider has been made
+ available by Carlos Guzmán Álvarez (aka "Carlos G.A."), who has also made a
+ number of contributions to the OdbcJdbc code.
+</ul>   
+   
+* Action Plan
+
+<ul>
+       <li>Get it to work on Mono too
+       
+       <li>TODO
+</ul>  
diff --git a/web/mysql b/web/mysql
new file mode 100755 (executable)
index 0000000..b8c96d9
--- /dev/null
+++ b/web/mysql
@@ -0,0 +1,66 @@
+* MySQL Data Provider
+
+<ul>
+       <li>MySQL Data Provider for 
+       <a href="http://www.mysql.com/">MySQL</a> databases.  It is written in C# and uses
+       the MySQL C Client Library
+
+       <li>Exists in namespace Mono.Data.MySql and assembly Mono.Data.MySql
+       
+       <li>Works on Windows and Linux via the MySQL client shared library
+           (libmySQL.dll on Windows and libmysqlclient.so on Linux).
+           
+    <li>Started by Daniel Morgan using C# Bindings to MySQL from Brad Meril.  
+    
+    <li><a href="http://www.mysql.com/articles/dotnet/">Exploring MySQL in the Microsoft .NET Environment</a> is an article
+    by Mr. Venu who is a MySQL AB developer.
+    
+    <li>Other projects which have created a .NET Data provider for MySQL in C#
+               <ul>
+                       <li><a href="http://sourceforge.net/projects/mysqldrivercs/">MySQLDriverCS</a> is a MySQL provider written in C#
+                       <li><a href="http://sourceforge.net/projects/mysqlnet/">MySQLNet</a> is a MySQL Manager provider written in C#
+
+               </ul>
+</ul>
+    
+* Current Status
+
+<ul>
+       <li>can connect
+       
+       <li>can execute non-queries via ExecuteNonQuery()
+       
+       <li>can execute aggregates via ExecuteScalar() and retrieve the
+       single row/single column result
+       
+       <li>can execute queries and retrieve results using a data reader.
+       
+       <li>a schema DataTable has been partially 
+       implemented which is returned from GetSchemaTable() in MySqlDataReader.
+       
+       <li>a DataTable in a DataSet can be filled via a MySqlDataAdapter 
+               
+       <li>The shared client libraries 
+       between windows version and linux are different: windows has libmySQL.dll 
+       while linux has libmysqlclient.so.  This is handled by the 
+       file etc/mono/config which is mapped by the mono runtime in knowing
+       which native shared library to load.  In cvs, this file is mono/config.in and
+       can be modified with a text editor.  
+</ul>
+
+* Action plan
+
+The current plan to work on the MySQL data provider:
+       
+       <ul>
+               <li>Parameters support via MySqlParameter and MySqlParameterCollection
+               
+               <li>Support LOBs (Large Object)
+               
+               <li>Change the MySQL provider to not be dependent on a client library and
+                   be written in 100% C#
+                   
+               <li>Connection pooling
+               
+               <li>Get the provider to work like other data providers
+       </ul>
diff --git a/web/odbc b/web/odbc
new file mode 100755 (executable)
index 0000000..c911371
--- /dev/null
+++ b/web/odbc
@@ -0,0 +1,49 @@
+* ODBC Data Provider
+<ul>
+       <li>Exists in namespace System.Data.Odbc and assembly System.Data
+       
+       <li>Works on Windows and Linux
+       
+       <li>Works on Windows via the native Windows odbc32.dll
+       
+       <li>Works on Linux via <a href="http://www.unixodbc.org/">unixODBC</a>
+       
+       <li>List of unixODBC <a href="http://www.unixodbc.org/drivers.html">drivers</a> and
+       an alternative list
+       
+       <li>An alternative to unixODBC, but not tested with this 
+       provider is <a href="http://www.iodbc.org">iODBC</a>
+       
+       <li>List of <a href="http://ourworld.compuserve.com/homepages/Ken_North/odbcvend.htm">ODBC Vendors</a>
+               
+       <li>ODBC Provider created by Brian Ritchie.
+</ul>
+       
+* Current Status
+
+<ul>
+       <li>Connect on Windows via native Windows odbc32.dll
+       
+       <li>Connect on Linux via unixODBC's libodbc.so
+       
+       <li>Various databases have been tested using their
+          ODBC drivers: MySQL, Oracle, IBM DB2, and Microsoft SQL Server
+          
+       <li>Can execute non-query commands via ExecuteNonQuery of a OdbcCommand
+       
+       <li>Can execute aggreates and retrieve a single row single column result via
+       ExecuteScalar of a OdbcCommand
+       
+       <li>Can execute queries via ExecuteReader of a OdbcCommand and 
+       retrieve results using an OdbcDataReader.
+       
+       <li>Can get a DataTable containing schema info via GetSchemaTable() in a OdbcDataReader
+</ul>
+       
+* Action Plan
+
+<ul>
+       <li>Create a Data Adapter to Fill data into a DataTable in a DataSet
+       
+       <li>TODO
+</ul>
diff --git a/web/oledb b/web/oledb
new file mode 100755 (executable)
index 0000000..d1b1625
--- /dev/null
+++ b/web/oledb
@@ -0,0 +1,53 @@
+* OLE DB Provider
+<ul>
+       <li> Provides a OleDb-like provider for Mono
+       using <a href="http://www.gnome-db.org/">GDA</a> as the data access layer.
+
+       <li> Exists in namespace System.Data.OleDb and assembly System.Data
+       
+       <li>Created by Rodrigo Moya
+       
+       <li>LibGDA has providers for:
+       <ul> 
+                 <li><a href="http://www.mysql.com/">MySQL</a> 
+                 <li><a href="http://www.postgresql.org/">PostgreSQL</a>
+                 <li>XML
+                 <li>ODBC (via <a href="http://www.unixodbc.org/">unixODBC</a>)
+                 <li><a href="http://www.oracle.com/">Oracle</a>
+                 <li><a href="http://www.borland.com/products/downloads/download_interbase.html">Interbase</a>
+                 <li><a href="http://www.sybase.com/downloads">Sybase</a> and
+                 <a href="http://www.microsoft.com/sql/default.asp">Microsoft SQL Server</a> (
+                 via <a href="http://www.freetds.org/">FreeTDS</a>)
+                 <li><a href="http://www-3.ibm.com/software/data/db2/">IBM DB2 Universal Database</a>
+                 <li><a href="http://www.hwaci.com/sw/sqlite/download.html">SQL Lite</a>
+                 <li><a href="http://www.microsoft.com/office/access/default.asp">MS Access</a> 
+                 (via <a href="http://mdbtools.sourceforge.net/">MDB Tools</a>)
+       </ul>
+</ul>
+       
+* Current Status
+       <ul>
+               <li>The OleDb provider is working with libgda (an OLE-DB/ADO data access for Unix).  
+               The C-Sharp bindings to libgda currently work - meaning they can compile, run, 
+               and you can connect to a
+               PostgreSQL database via libgda via the C-Sharp bindings to libgda.  
+       
+               <li>Basic
+               functionality (execution of commands, data retrieval, transactions, etc) are
+               now working. 
+       
+               <li>An inital implementation of GetSchemaTable() for
+               the OleDbDataReader has been checked into cvs.  GetSchemaTable() isn't correct for OleDb,
+               but the foundation is there.
+       </ul>
+
+* Action Plan
+       <ul>
+               <li>Current focus is on filling up the missing pieces (Data adapters
+               mainly) and schema support.  
+       
+               <li>We need help building libgda on Windows though.  libgda
+               builds find on linux though.  
+
+               <li>Need to make the OleDb provider compatible with the OleDb provider in Microsoft .NET
+       </ul>
index 344f6beacc8ced8afa4ddc62d2290bd19cc82c68..afc7ecea2dd0a1104ac78199687d1c9e035bd439 100644 (file)
-* PostgreSQL Provider\r
-\r
-       <p>Exists in Mono.Data.PostgreSql now.\r
-               
-       <p>We are able to do simple CREATE TABLE, DROP TABLE, UPDATE, INSERT, and
+* PostgreSQL Data Provider
+
+<ul>
+       <li>Exists in namespace Mono.Data.PostgreSql and assembly Mono.Data.PostgreSql
+       
+       <li>Is a Mono Data Provider for the <a href="http://www.postgresql.org/">PostgreSQL</a>
+       client/server database management system.
+       
+       <li>Written in C# and has C# bindings to the PostgreSQL C Client library pq.dll on Windows
+       and libpq.so on Linux.
+</ul>
+
+* Current Status
+
+<ul>
+       <li>We are able to do simple CREATE TABLE, DROP TABLE, UPDATE, INSERT, and
        DELETE SQL commands using the ExecuteNonQuery method in PgSqlCommand.  
        
-       <p>We can execute multiple queries and do a NextResult() in PgSqlDataReader()
+       <li>We can execute multiple queries and do a NextResult() in PgSqlDataReader()
        to get the next result set.  
        
-       <p>We are also able to do simple aggregate functions, 
+       <li>We are also able to do simple aggregate functions, 
        ie, count(), sum(), min(), and max() 
        in a simple SELECT SQL query using the ExecuteScalar() now.  
        
-       <p>We are also able to retrieve data with a simple SELECT SQL query 
+       <li>We are also able to retrieve data with a simple SELECT SQL query 
        using ExecuteReader() which returns a PgSqlDataReader.  We are able to
        use GetSchemaTable() to get the meta data about the table columns.  
        We are able     to Read() to get each row from the result set.  
        
-       <p>Here is a sample of code that is based on PostgresTest.cs and
-       TestSqlDataReader.cs tests:
-       
-<pre>
- static void SelectData (IDbConnection cnc) {
-       
-   IDbCommand selectCommand = cnc.CreateCommand();
-   IDataReader reader;
-
-   selectCommand.CommandType = CommandType.Text;
-   selectCommand.CommandText = 
-     "select * from pg_user;" + \r
-        "select * from pg_tables;" + \r
-     "select * from pg_database";\r
-
-   reader = selectCommand.ExecuteReader ();
-
-   do {\r
-       // get the DataTable that holds\r
-       // the schema\r
-       DataTable dt = rdr.GetSchemaTable();\r
-\r
-       if(rdr.RecordsAffected != -1) {\r
-               // Results for \r
-               // SQL INSERT, UPDATE, DELETE Commands \r
-               // have RecordsAffected >= 0\r
-               Console.WriteLine("Result is from \r
-                       a SQL Command \r
-                (INSERT,UPDATE,DELETE).  \r
-                       Records Affected: " + \r
-                               rdr.RecordsAffected);\r
-       }\r
-       else if (dt == null)\r
-               Console.WriteLine("Result is from \r
-                     a SQL Command \r
-                     not (INSERT,UPDATE,DELETE).   \r
-                     Records Affected: " + \r
-                                  rdr.RecordsAffected);\r
-       else {\r
-               // Results for\r
-               // SQL not INSERT, UPDATE, nor DELETE\r
-               // have RecordsAffected = -1\r
-               Console.WriteLine("Result is from a \r
-                  SQL SELECT Query.  \r
-                  Records Affected: " + \r
-                        rdr.RecordsAffected);\r
-               \r
-               // Results for a SQL Command \r
-                    (CREATE TABLE, SET, etc)\r
-               // will have a null reference returned \r
-           from GetSchemaTable()\r
-               // \r
-               // Results for a SQL SELECT Query\r
-               // will have a DataTable returned \r
-                    from GetSchemaTable()\r
-\r
-               results++;\r
-               Console.WriteLine("Result Set " + \r
-                        results + "...");\r
-                                               \r
-               // number of columns in the table\r
-               Console.WriteLine("   Total Columns: " +\r
-                       dt.Columns.Count);\r
-\r
-               // display the schema\r
-               foreach (DataRow schemaRow \r
-                       in dt.Rows) {\r
-                       foreach (DataColumn schemaCol \r
-                               in dt.Columns)\r
-                               Console.WriteLine(\r
-                                   schemaCol.ColumnName + \r
-                                       " = " + \r
-                                       schemaRow[schemaCol]);\r
-                               Console.WriteLine();\r
-                       }\r
-\r
-                       int nRows = 0;\r
-                       string output, \r
-                               metadataValue, \r
-                               dataValue;\r
-                       // Read and display the rows\r
-                       Console.WriteLine("Gonna do a \r
-                               Read() now...");\r
-                       while(rdr.Read()) {\r
-                               Console.WriteLine("   Row " + \r
-                                       nRows + ": ");\r
-                                       \r
-                               for(c = 0; \r
-                                       c < rdr.FieldCount; \r
-                                       c++) {\r
-                                       // column meta data \r
-                                       DataRow dr = dt.Rows[c];\r
-                                       metadataValue = \r
-                                               "    Col " + \r
-                                               c + ": " + \r
-                                               dr["ColumnName"];\r
-                                               \r
-                                       // column data\r
-                                       if(rdr.IsDBNull(c) == true)\r
-                                               dataValue = " is NULL";\r
-                                       else\r
-                                               dataValue = \r
-                                                       ": " + \r
-                                                       rdr.GetValue(c);\r
-                               \r
-                                       // display column meta \r
-                                       // data and data\r
-                                       output = metadataValue + \r
-                                                       dataValue;                                      \r
-                                       Console.WriteLine(output);\r
-                               }\r
-                               nRows++;\r
-                       }\r
-                       Console.WriteLine(\r
-                               "   Total Rows: " + \r
-                               nRows);\r
-               }       \r
-       } while(rdr.NextResult());\r
-       Console.WriteLine("Total Result sets: " + \r
-               results);\r
-                       \r
-       rdr.Close();\r
- }
-
-</pre>
-       
-       <p>We are able to get 
+       <li>We are able to get 
        String data (char, character, text, varchar), Int16 (smallint),
        Int32 (integer), Int64 (bigint), DateTime (time, date, timestamp),
        Boolean (boolean), Single (float), and Double (double).
        More data types will come later.  Note, the types that do work still 
        need thorough testing.
        
-       <p>Rows that are returned which contain columns that are NULL are handled now. 
+       <li>Rows that are returned which contain columns that are NULL are handled now. 
        The PgSqlDataReader method IsDBNull() needs to be called to determine 
        if a field IS NULL before trying to read data from that field.
        
-       <p>Calling PostgreSQL stored procedures works.  It does not work perfectly.  
+       <li>Calling PostgreSQL stored procedures works.  It does not work perfectly.  
        It may not
        even work to specification - yet.  If you want to test it yourself, look at
        TestSqlDataReader.cs or PostgresTest.cs in
        mcs/class/System.Data/Test.  
        
-       <p>Below, I have some sample code you can
+       <li>Below, I have some sample code you can
        use to call a PostgreSQL stored procedure named "version".  This stored
        procedure returns a string containing the PostgreSQL server version.  Notice
        the CommandType is StoredProcedure and the method ExecuteScalar() is called.
        
-       <p>ExecuteScalar() is a lightweight method in class PgSqlCommand that only returns
+       <li>ExecuteScalar() is a lightweight method in class PgSqlCommand that only returns
        one row and one column as one object - even if there is more than row or column.
-       
-<pre>
- static string GetDatabaseServerVersion (PgSqlConnection cnc) 
- {                      
-       PgSqlCommand cmd = cnc.CreateCommand ();
-       string data;
-
-       cmd.CommandType = CommandType.StoredProcedure;
-       cmd.CommandText = "version";
-                                                       
-       data = (string) cmd.ExecuteScalar ();
-
-       return data;
- }
-</pre>
                        
-       * <p>We have the beginnings of Parameters support PostgreSQL.  Only
+       <li>We have the beginnings of Parameters support PostgreSQL.  Only
        Input Parameters are currently supported.  Output, Input/Output,
        and Return parameters still need to be done.
        
-       <p>A lot of functionality in System.Data is missing, but the 
+       <li>A lot of functionality in System.Data is missing, but the 
        infrastructure is starting to come together.
        
-       <p>A lot of Exceptions need to be thrown for various exceptions.  However,
+       <li>A lot of Exceptions need to be thrown for various exceptions.  However,
        PgSqlException, PgSqlErrorCollection, and PgSqlError have been partially
        implemented.
        
-       <p>Tim Coleman and Rodrigo Moya got the beginnings of the
+       <li>Tim Coleman and Rodrigo Moya got the beginnings of the
        PgSqlDataAdapter/DataSet/DataTable/DataRow to work.  Currently, 
        the PgSqlDataAdapter can Fill() relational data into a DataTable in a DataSet.
        See the test mcs/class/System.Data/Test/TestSqlDataAdapter.cs to see it in action.
-       Below, I show a snippets from the test:
-       
-<pre>
- string connectionString;
- string sqlQuery;
- PgSqlDataAdapter adapter;
- DataSet dataSet = null;
-
- connectionString =
-       "host=localhost;" +
-       "dbname=test;" +
-       "user=postgres";
-                                               
- sqlQuery = "select * from pg_tables";
-
- adapter = new PgSqlDataAdapter (sqlQuery, 
-                       connectionString);
-                               
- dataSet = new DataSet ();
-
- adapter.Fill (dataSet);
-                       
- if (dataSet != null) {
-       foreach (DataRow row in dataSet.Tables["Table"].Rows)
-               Console.WriteLine("tablename: " + row["tablename"]);
- }
-</pre> 
+</ul>
 
 * Testing the PostgreSQL Provider
 
                a linux user 'postgres' created and initdb ran.  Or maybe not.
 
 <pre>
- su\r
- adduser postgres\r
- mkdir /usr/local/pgsql/data\r
- chown postgres /usr/local/pgsql/data\r
- su - postgres\r
- initdb -D /usr/local/pgsql/data\r
- postmaster -i -D /usr/local/pgsql/data\r
- createdb test\r
+ su
+ adduser postgres
+ mkdir /usr/local/pgsql/data
+ chown postgres /usr/local/pgsql/data
+ su - postgres
+ initdb -D /usr/local/pgsql/data
+ postmaster -i -D /usr/local/pgsql/data
+ createdb test
  psql test
 </pre>
        
@@ -395,10 +238,10 @@ net start ipc-daemon
                  
                        <p>
 <pre>
-mkdir /usr/local/pgsql/data\r
-initdb -D /usr/local/pgsql/data\r
-postmaster -D /usr/local/pgsql/data\r
-createdb test\r
+mkdir /usr/local/pgsql/data
+initdb -D /usr/local/pgsql/data
+postmaster -D /usr/local/pgsql/data
+createdb test
 psql test              
 </pre>
                  
@@ -467,8 +310,8 @@ PostgreSQL: "host=localhost dbname=test user=joe password=smoe"
        to PgSqlConnection, then you need to run mcs like:
 
 <pre>
- mono f:/cygwin/home/DanielMorgan/mono/install/bin/mcs.exe \\r
-    PostgresTest.cs \\r
+ mono f:/cygwin/home/DanielMorgan/mono/install/bin/mcs.exe \
+    PostgresTest.cs \
     -r System.Data.dll \
     -r Mono.Data.PostgreSqlClient.dll
 </pre>
@@ -494,168 +337,176 @@ mono PostgresTest.exe
 
 <p>
 <pre>   
-\r
- danmorg@DANPC ~/mono/mcs/class/System.Data/Test\r
- $ mcs PostgresTest.cs -r System.Data.dll\r
-\r
- danmorg@DANPC ~/mono/mcs/class/System.Data/Test\r
- $ mono PostgresTest.exe\r
-        Postgres provider specific tests...\r
-\r
-                Drop table:\r
- Error (don't worry about this one)SqlError:PGRES_FATAL_ERROR ERROR:  \r
- table "mono_postgres_test" does not exist\r
- <Stack Trace>\r
-\r
-                Create table with all supported types:\r
- OK\r
-                Insert values for all known types:\r
- OK\r
-                Update values:\r
- OK\r
-                Insert values for all known types:\r
- OK\r
- Aggregate: count(*)\r
- Agg Result: 2\r
- Aggregate: min(text_value)\r
- Agg Result: This is a text\r
- Aggregate: max(int4_value)\r
- Agg Result: 1048000\r
- Aggregate: sum(int4_value)\r
- Agg Result: 1048003\r
-                Select values from the database:\r
- Result is from a SELECT SQL Query.  Records Affected: -1\r
- Result Set 1...\r
-   Total Columns: 28\r
- ColumnName = boolean_value\r
- ColumnOrdinal = 1\r
- ColumnSize = 1\r
- NumericPrecision = 0\r
- NumericScale = 0\r
- IsUnique = False\r
- IsKey =\r
- BaseCatalogName =\r
- BaseColumnName = boolean_value\r
- BaseSchemaName =\r
- BaseTableName =\r
- DataType = System.Boolean\r
- AllowDBNull = False\r
- ProviderType = 16\r
- IsAliased = False\r
- IsExpression = False\r
- IsIdentity = False\r
- IsAutoIncrement = False\r
- IsRowVersion = False\r
- IsHidden = False\r
- IsLong = False\r
- IsReadOnly = False\r
-\r
- ...\r
-\r
- ColumnName = null_timestamp_value\r
- ColumnOrdinal = 28\r
- ColumnSize = 8\r
- NumericPrecision = 0\r
- NumericScale = 0\r
- IsUnique = False\r
- IsKey =\r
- BaseCatalogName =\r
- BaseColumnName = null_timestamp_value\r
- BaseSchemaName =\r
- BaseTableName =\r
- DataType = System.DateTime\r
- AllowDBNull = False\r
- ProviderType = 1184\r
- IsAliased = False\r
- IsExpression = False\r
- IsIdentity = False\r
- IsAutoIncrement = False\r
- IsRowVersion = False\r
- IsHidden = False\r
- IsLong = False\r
- IsReadOnly = False\r
-\r
- Gonna do a Read() now...\r
-   Row 0:\r
-    Col 0: boolean_value: False\r
-    Col 1: int2_value: 5\r
-    Col 2: int4_value: 3\r
-    Col 3: bigint_value: 9\r
-    Col 4: float_value: 3.141590\r
-    Col 5: double_value: 3.14159\r
-    Col 6: numeric_value: 123456789012.345\r
-    Col 7: char_value: Mono.Data!\r
-    Col 8: varchar_value: It was not me!\r
-    Col 9: text_value: We got data!\r
-    Col 10: point_value: (1,0)\r
-    Col 11: time_value: 01/01/1 21:13:14\r
-    Col 12: date_value: 02/29/2000 00:00:00\r
-    Col 13: timestamp_value: 02/29/2004 14:00:11\r
-    Col 14: null_boolean_value is NULL\r
-    Col 15: null_int2_value is NULL\r
-    Col 16: null_int4_value is NULL\r
-    Col 17: null_bigint_value is NULL\r
-    Col 18: null_float_value is NULL\r
-    Col 19: null_double_value is NULL\r
-    Col 20: null_numeric_value is NULL\r
-    Col 21: null_char_value is NULL\r
-    Col 22: null_varchar_value is NULL\r
-    Col 23: null_text_value is NULL\r
-    Col 24: null_point_value is NULL\r
-    Col 25: null_time_value is NULL\r
-    Col 26: null_date_value is NULL\r
-    Col 27: null_timestamp_value is NULL\r
-   Row 1:\r
-    Col 0: boolean_value: True\r
-    Col 1: int2_value: -22\r
-    Col 2: int4_value: 1048000\r
-    Col 3: bigint_value: 123456789012345\r
-    Col 4: float_value: 3.141590\r
-    Col 5: double_value: 3.14159\r
-    Col 6: numeric_value: 123456789012.345\r
-    Col 7: char_value: This is a char\r
-    Col 8: varchar_value: This is a varchar\r
-    Col 9: text_value: This is a text\r
-    Col 10: point_value: (1,0)\r
-    Col 11: time_value: 01/01/1 21:13:14\r
-    Col 12: date_value: 02/29/2000 00:00:00\r
-    Col 13: timestamp_value: 02/29/2004 14:00:11\r
-    Col 14: null_boolean_value is NULL\r
-    Col 15: null_int2_value is NULL\r
-    Col 16: null_int4_value is NULL\r
-    Col 17: null_bigint_value is NULL\r
-    Col 18: null_float_value is NULL\r
-    Col 19: null_double_value is NULL\r
-    Col 20: null_numeric_value is NULL\r
-    Col 21: null_char_value is NULL\r
-    Col 22: null_varchar_value is NULL\r
-    Col 23: null_text_value is NULL\r
-    Col 24: null_point_value is NULL\r
-    Col 25: null_time_value is NULL\r
-    Col 26: null_date_value is NULL\r
-    Col 27: null_timestamp_value is NULL\r
-   Total Rows Retrieved: 2\r
- Total Result sets: 1\r
-                Call ExecuteReader with a SQL Command. \r
-                (Not INSERT,UPDATE,DELETE\r
- ).\r
- Result is from a SQL Command not (INSERT,UPDATE,DELETE).  \r
-                        Records Affected: -1\r
- Total Result sets: 0\r
-                Call ExecuteReader with a SQL Command. \r
-                        (Is INSERT,UPDATE,DELETE)\r
- .\r
- Result is from a SQL Command (INSERT,UPDATE,DELETE).  Records Affected: 1\r
- Total Result sets: 0\r
-                Calling stored procedure version()\r
- Result: PostgreSQL 7.2.1 on i686-pc-cygwin, compiled by GCC 2.95.3-5\r
- Database Server Version: PostgreSQL 7.2.1 on i686-pc-cygwin, \r
-              compiled by GCC 2.9\r
- 5.3-5\r
- Clean up...\r
-                Drop table...\r
- OK\r
- RESULT: 0\r
-\r
-</pre>\r
-\r
+
+ danmorg@DANPC ~/mono/mcs/class/System.Data/Test
+ $ mcs PostgresTest.cs -r System.Data.dll
+
+ danmorg@DANPC ~/mono/mcs/class/System.Data/Test
+ $ mono PostgresTest.exe
+        Postgres provider specific tests...
+
+                Drop table:
+ Error (don't worry about this one)SqlError:PGRES_FATAL_ERROR ERROR:  
+ table "mono_postgres_test" does not exist
+ <Stack Trace>
+
+                Create table with all supported types:
+ OK
+                Insert values for all known types:
+ OK
+                Update values:
+ OK
+                Insert values for all known types:
+ OK
+ Aggregate: count(*)
+ Agg Result: 2
+ Aggregate: min(text_value)
+ Agg Result: This is a text
+ Aggregate: max(int4_value)
+ Agg Result: 1048000
+ Aggregate: sum(int4_value)
+ Agg Result: 1048003
+                Select values from the database:
+ Result is from a SELECT SQL Query.  Records Affected: -1
+ Result Set 1...
+   Total Columns: 28
+ ColumnName = boolean_value
+ ColumnOrdinal = 1
+ ColumnSize = 1
+ NumericPrecision = 0
+ NumericScale = 0
+ IsUnique = False
+ IsKey =
+ BaseCatalogName =
+ BaseColumnName = boolean_value
+ BaseSchemaName =
+ BaseTableName =
+ DataType = System.Boolean
+ AllowDBNull = False
+ ProviderType = 16
+ IsAliased = False
+ IsExpression = False
+ IsIdentity = False
+ IsAutoIncrement = False
+ IsRowVersion = False
+ IsHidden = False
+ IsLong = False
+ IsReadOnly = False
+
+ ...
+
+ ColumnName = null_timestamp_value
+ ColumnOrdinal = 28
+ ColumnSize = 8
+ NumericPrecision = 0
+ NumericScale = 0
+ IsUnique = False
+ IsKey =
+ BaseCatalogName =
+ BaseColumnName = null_timestamp_value
+ BaseSchemaName =
+ BaseTableName =
+ DataType = System.DateTime
+ AllowDBNull = False
+ ProviderType = 1184
+ IsAliased = False
+ IsExpression = False
+ IsIdentity = False
+ IsAutoIncrement = False
+ IsRowVersion = False
+ IsHidden = False
+ IsLong = False
+ IsReadOnly = False
+
+ Gonna do a Read() now...
+   Row 0:
+    Col 0: boolean_value: False
+    Col 1: int2_value: 5
+    Col 2: int4_value: 3
+    Col 3: bigint_value: 9
+    Col 4: float_value: 3.141590
+    Col 5: double_value: 3.14159
+    Col 6: numeric_value: 123456789012.345
+    Col 7: char_value: Mono.Data!
+    Col 8: varchar_value: It was not me!
+    Col 9: text_value: We got data!
+    Col 10: point_value: (1,0)
+    Col 11: time_value: 01/01/1 21:13:14
+    Col 12: date_value: 02/29/2000 00:00:00
+    Col 13: timestamp_value: 02/29/2004 14:00:11
+    Col 14: null_boolean_value is NULL
+    Col 15: null_int2_value is NULL
+    Col 16: null_int4_value is NULL
+    Col 17: null_bigint_value is NULL
+    Col 18: null_float_value is NULL
+    Col 19: null_double_value is NULL
+    Col 20: null_numeric_value is NULL
+    Col 21: null_char_value is NULL
+    Col 22: null_varchar_value is NULL
+    Col 23: null_text_value is NULL
+    Col 24: null_point_value is NULL
+    Col 25: null_time_value is NULL
+    Col 26: null_date_value is NULL
+    Col 27: null_timestamp_value is NULL
+   Row 1:
+    Col 0: boolean_value: True
+    Col 1: int2_value: -22
+    Col 2: int4_value: 1048000
+    Col 3: bigint_value: 123456789012345
+    Col 4: float_value: 3.141590
+    Col 5: double_value: 3.14159
+    Col 6: numeric_value: 123456789012.345
+    Col 7: char_value: This is a char
+    Col 8: varchar_value: This is a varchar
+    Col 9: text_value: This is a text
+    Col 10: point_value: (1,0)
+    Col 11: time_value: 01/01/1 21:13:14
+    Col 12: date_value: 02/29/2000 00:00:00
+    Col 13: timestamp_value: 02/29/2004 14:00:11
+    Col 14: null_boolean_value is NULL
+    Col 15: null_int2_value is NULL
+    Col 16: null_int4_value is NULL
+    Col 17: null_bigint_value is NULL
+    Col 18: null_float_value is NULL
+    Col 19: null_double_value is NULL
+    Col 20: null_numeric_value is NULL
+    Col 21: null_char_value is NULL
+    Col 22: null_varchar_value is NULL
+    Col 23: null_text_value is NULL
+    Col 24: null_point_value is NULL
+    Col 25: null_time_value is NULL
+    Col 26: null_date_value is NULL
+    Col 27: null_timestamp_value is NULL
+   Total Rows Retrieved: 2
+ Total Result sets: 1
+                Call ExecuteReader with a SQL Command. 
+                (Not INSERT,UPDATE,DELETE
+ ).
+ Result is from a SQL Command not (INSERT,UPDATE,DELETE).  
+                        Records Affected: -1
+ Total Result sets: 0
+                Call ExecuteReader with a SQL Command. 
+                        (Is INSERT,UPDATE,DELETE)
+ .
+ Result is from a SQL Command (INSERT,UPDATE,DELETE).  Records Affected: 1
+ Total Result sets: 0
+                Calling stored procedure version()
+ Result: PostgreSQL 7.2.1 on i686-pc-cygwin, compiled by GCC 2.95.3-5
+ Database Server Version: PostgreSQL 7.2.1 on i686-pc-cygwin, 
+              compiled by GCC 2.9
+ 5.3-5
+ Clean up...
+                Drop table...
+ OK
+ RESULT: 0
+
+</pre>
+
+* Action Plan
+
+       <p>Eventually replace the PostgreSQL data provider in Mono
+       with <a href="http://gborg.postgresql.org/project/npgsql/projdisplay.php">Npgsql</a>.
+       Npgsql is a .Net Data Provider for PostgreSQL which implements 
+       the <a href="http://developer.postgresql.org/docs/postgres/protocol.html">PostgreSQL Frontend/Backend Protocol</a>.
+       Npgsql is implemented in 100% C#.  This provider was created by Francisco Figueiredo jr.
+       and has many programmers developing the provider.
diff --git a/web/sqlclient b/web/sqlclient
new file mode 100755 (executable)
index 0000000..f73ba3e
--- /dev/null
@@ -0,0 +1,58 @@
+* Microsoft SQL Server Provider
+
+<ul>
+       <li>ADO.NET Provider for Microsoft SQL Server 7/2000 databases
+
+       <li>Exists in namespace System.Data.SqlClient and assembly System.Data
+       
+       <li>Created by Tim Coleman
+       
+       <li>Used the <a href="http://www.freetds.org/">FreeTDS</a> and 
+       <a href="http://jtds.sourceforge.net/">jTDS</a> projects as resources.
+       
+       <li>Implemented in 100% C#
+       
+       <li>Is similar to the Mono.Data.TdsClient and Mono.Data.SybaseClient providers.
+</ul>
+
+* Current Status
+       
+<ul>
+       <li>Able to connect to Microsoft SQL Server 7/2000 databases
+       
+       <li>Connection pooling works.
+       
+       <li>Stored Procedures work
+       
+       <li>Parameters work.  
+       
+       <li>Prepare works.
+       
+       <li>SQL commands can be executed
+       via ExecuteNonQuery() of a SqlCommand.
+       
+       <li>SQL aggregates can be executed and a single row and single column
+       result can be retrieved via ExecuteScalar() of a SqlCommand
+       
+       <li>SQL queries can be executed via ExecuteReader() and results 
+       can be retrieved via SqlDataReader.
+       
+       <li>a DataTable with schema info about a result can be gotten via GetSchemaTable()
+       in a SqlDataReader
+       
+       <li>XML can be read via ExecuteXmlReader in a SqlCommand.
+       
+       <li>Data can be filled in a DataTable in a DataSet via a SqlDataAdapter
+       
+       <li>Uses TDS Protocol Version 7.0
+       
+       <li><a href="http://www.go-mono.com/tds-providers.html">Design of the Microsoft SQL Server, Sybase, and TDS Providers in Mono</a>
+</ul>
+
+* Action plan
+
+<ul>
+       <li>Connection timeouts is being developed now.
+
+       <li>TODO
+</ul>
diff --git a/web/sqlite b/web/sqlite
new file mode 100755 (executable)
index 0000000..07312db
--- /dev/null
@@ -0,0 +1,28 @@
+* SQL Lite Data Provider
+
+<ul>
+       <li>Exists in namespace and assembly Mono.Data.SqliteClient
+       
+       <li>Created by Vladimir Vukicevic
+       
+       <li><a href"http://www.hwaci.com/sw/sqlite/download.html">SQL Lite</a>
+       binaries exist for Linux and Windows.  sqlite.dll on Windows 
+       and sqlite.so on Linux.
+</ul>
+
+* Current Status
+
+<ul>
+       <li>Able to connect, execute commands, and retrieve data...
+       
+       <li>Works in mPhoto
+</ul>
+
+* Action Plan
+
+<ul>
+       <li>Create a DataAdapter for SQL Lite named SqliteDataAdapter that can be used to 
+       Fill a DataTable in a DataSet
+       
+       <li>TODO
+</ul>
diff --git a/web/sybase b/web/sybase
new file mode 100755 (executable)
index 0000000..6a165fa
--- /dev/null
@@ -0,0 +1,48 @@
+* Sybase Data Provider
+
+<ul>
+       <li>ADO.NET Provider for Sybase SQL Server databases
+
+       <li>Exists in namespace Mono.Data.SybaseClient and assembly Mono.Data.SybaseClient
+       
+       <li>Created by Tim Coleman
+       
+       <li>Used the <a href="http://www.freetds.org/">FreeTDS</a> and 
+       <a href="http://jtds.sourceforge.net/">jTDS</a> projects as resources.
+       
+       <li>Implemented in 100% C#
+       
+       <li>Is similar to the Mono.Data.TdsClient and System.Data.SqlClient providers.
+       
+       <li>Uses TDS Protocol Version 5.0
+       
+       <li><a href="http://www.go-mono.com/tds-providers.html">Design of the Microsoft SQL Server, Sybase, and TDS Providers in Mono</a>
+</ul>
+
+* Current Status
+       
+<ul>   
+       <li>Able to connect to Sybase databases
+       
+       <li>SQL commands can be executed
+       via ExecuteNonQuery() of a SybaseCommand.
+       
+       <li>SQL aggregates can be executed and a single row and single column
+       result can be retrieved via ExecuteScalar() of a SybaseCommand
+       
+       <li>SQL queries can be executed via ExecuteReader() and results 
+       can be retrieved via SybaseDataReader.
+       
+       <li>a DataTable with schema info about a result can be gotten via GetSchemaTable()
+       in a SybaseDataReader
+       
+       <li>Data can be filled in a DataTable in a DataSet via a SybaseDataAdapter
+</ul>
+
+* Action plan
+
+<ul>
+       <li>Connection timeouts is being developed now.
+
+       <li>TODO
+</ul>
index e281ef1845661ec0dd4380d214b3dd775f7f5800..6442e69601aefb040f7b2c2673780fc7747a4184 100644 (file)
@@ -1,10 +1,10 @@
-* Design of the Microsoft SQL Server, Sybase, and TDS Providers in Mono
+* Design of the Microsoft SQL Server, Sybase, and TDS Data Providers in Mono
 
        <ul>
                * After much discussion among the Mono ADO.NET developers,
-                 we have come up with the design of implementing a Sybase and Microsoft 
-                 SQL Server ADO.NET provider.  We have already begun implementing 
-                 this design in Mono.
+                 we have come up with the design of implementing a Sybase, Microsoft 
+                 SQL Server, and TDS Generic ADO.NET providers.  These providers have
+                 been created and are actively developed by Tim Coleman.
 
                * Since Sybase and Microsoft SQL Server databases both 
                  use the TDS protocol for data access, and other implementations 
                <ol>
                  <li><p>Mono.Data.SybaseClient namepace and assembly will 
                  hold the ADO.NET provider for Sybase SQL Server database.  
-                 This provider will default to using TDS version 5.0 which 
-                 can only be used with  Sybase.
+                 This provider uses TDS version 5.0 which 
+                 can only be used with Sybase databases.
 
                  <li><p>System.Data.SqlClient namespace and System.Data assembly 
                  will hold the ADO.NET provider
-          for Microsoft SQL Server 7.0/2000 databases.  This is to be 
-          compatible with Microsoft .NET
-          This provider will default to using TDS version 7.0 
-          which only supports Microsoft SQL Server 7.0/2000 just like 
-          SqlClient in Microsoft .NET does.  There is TDS version of 8.0 
+          for Microsoft SQL Server 7.0/2000 databases.  This provider is to be 
+          compatible with SqlClient in Microsoft .NET and uses TDS version 7.0 
+          which only supports Microsoft SQL Server 7.0/2000.  
+          There is TDS version 8.0 
           which we will need to support as well, but it is used for 
           Microsoft SQL Server 2000 databases.
 
-                 <li><p>Mono.Data.TdsClient namespace and assembly is not 
-                 meant to be an ADO.NET provider in Mono, but a means to 
-                 provide generic unit tests for the TDS functionality shared by the SqlClient 
-                 and SybaseClient providers.  This provider will default to 
+                 <li><p>Mono.Data.TdsClient namespace and assembly is a generic 
+                 provider for older TDS databases.  This provider will default to 
                  using TDS version 4.2 which can be used by older Sybase and 
                  Microsoft SQL Server databases.
                 </ol>
diff --git a/web/tdsclient b/web/tdsclient
new file mode 100755 (executable)
index 0000000..c6fcafb
--- /dev/null
@@ -0,0 +1,51 @@
+* TDS Generic Provider
+
+<ul>
+       <li>ADO.NET Provider for older Sybase and Microsoft SQL Server databases
+
+       <li>Exists in namespace Mono.Data.TdsClient and assembly Mono.Data.TdsClient
+       
+       <li>Created by Tim Coleman
+       
+       <li>Used the <a href="http://www.freetds.org/">FreeTDS</a> and 
+       <a href="http://jtds.sourceforge.net/">jTDS</a> projects as resources.
+       
+       <li>Implemented in 100% C#
+       
+       <li>Is similar to the Mono.Data.SybaseClient and System.Data.SqlClient providers.
+       
+       <li>Uses TDS Protocol Version 4.2 by default
+       
+       <li><a href="http://www.go-mono.com/tds-providers.html">Design of the Microsoft SQL Server, Sybase, and TDS Providers in Mono</a>
+</ul>
+
+* Current Status
+
+<ul>
+       <li>Only builds on Windows currently due to mcs does not support modules and mcs
+       has problems with code that is internal.
+       
+       <li>Able to connect to Microsoft SQL Server and Sybase databases
+       
+       <li>SQL commands can be executed
+       via ExecuteNonQuery() of a TdsCommand.
+       
+       <li>SQL aggregates can be executed and a single row and single column
+       result can be retrieved via ExecuteScalar() of a TdsCommand
+       
+       <li>SQL queries can be executed via ExecuteReader() and results 
+       can be retrieved via TdsDataReader.
+       
+       <li>a DataTable with schema info about a result can be gotten via GetSchemaTable()
+       in a TdsDataReader
+       
+       <li>Data can be filled in a DataTable in a DataSet via a TdsDataAdapter
+</ul>
+
+* Action plan
+
+<ul>
+       <li>Connection timeouts is being developed now.
+
+       <li>TODO
+</ul>
index 908b5332888d4a3cac8b7f4a5590ee978cfe448f..17e431f80567420f12894d7076877efaccf7c744 100644 (file)
 1,HOWTO,mono-contribution-howto.html,mono-contribution-howto.src
 0,Plans,plans.html,plans.src
 1,ADO.NET,ado-net.html,ado-net.src
+2,Firebird Interbase,firebird.html,firebird.src
+2,Microsft SQL Server,sqlclient.html,sqlclient.src
+2,MySQL,mysql.html,mysql.src
+2,ODBC,odbc.html,odbc.src
+2,OLE DB,oledb.html,oledb.src
 2,PostgreSQL,postgresql.html,postgresql.src
-2,SqlClient,tds-providers.html,tds-providers.src
+2,SQL Lite,sqlite.html,sqlite.src
+2,Sybase,sybase.html,sybase.src
+2,TDS Generic,tdsclient.html,tdsclient.src
 1,ASP.NET,asp-net.html,asp-net.src
 1,Java,java.html,java.src
 1,Windows.Forms,winforms.html,winforms.src
index aa48fee571c6268179b2183ff6c1aa73e64daa57..3140b9ca04d793b960f114a98f049e78aa253d5b 100644 (file)
@@ -5,8 +5,15 @@ CORCOMPARE=../../../mcs/tools/corcompare
 
 OBJECTS=       \
        deploy/ado-net.html                                     \
+               deploy/firebird.html                    \
+               deploy/mysql.html                               \
+               deploy/odbc.html                                \
+               deploy/oledb.html                               \
                deploy/postgresql.html                  \
-               deploy/tds-providers.html               \
+               deploy/sqlclient.html                   \
+               deploy/sqlite.html                              \
+               deploy/sybase.html                              \
+               deploy/tdsclient.html                   \
        deploy/anoncvs.html                                     \
        deploy/asp-net.html                                     \
        deploy/books.html                                       \