Browse Source

2002-10-18 Daniel Morgan <[email protected]>

	* doc/ado-net: updated status of
	the ADO.NET functionality and providers
	and added link to tds-providers.html

	* doc/tds-providers: added file to
	describe the design	and status of
	the SqlClient, SybaseClient, and TdsClient
	ADO.NET providers.

	* doc/web/makefile
	* doc/web/command: added new web page
	tds-providers.html to build of 	www.go-mono.com web site

svn path=/trunk/mono/; revision=8370
Daniel Morgan 23 years ago
parent
commit
ea380d9f67
8 changed files with 646 additions and 286 deletions
  1. 152 142
      doc/ado-net
  2. 168 0
      doc/tds-providers
  3. 2 1
      doc/web/commands
  4. 1 0
      doc/web/makefile
  5. 152 142
      web/ado-net
  6. 168 0
      web/tds-providers
  7. 2 1
      web/web/commands
  8. 1 0
      web/web/makefile

+ 152 - 142
doc/ado-net

@@ -13,36 +13,22 @@
 
 	The current plan to implement ADO.NET is as follows:
 
-	<b>Step 1:</b> Initial <a href="http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemdatasqlclient.asp?frame=true">System.Data.SqlClient</a> Provider:
-
-	<ul>
-		* Initial implementation of System.Data.SqlClient is based on
-		  the <a href="http://www.postgresql.org/idocs/">PostgreSQL C API</a> which is a
-		  client API to the PostgreSQL DBMS.  PostgreSQL was chosen so we could quickly
-		  create and test the System.Data classes.
-		  
-		* Once the <a href="http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemdatasqlclient.asp?frame=true">System.Data.SqlClient</a>
-		  code is functional and is usable by other people, we willl move it to
-		  Mono.Data.PostgreSQL.  
-		  
-		* <a href="http://www.go-mono.com/postgresql.html">Current PostgreSQL ADO.NET Provider Status and Test Notes</a>
-
-	</ul>
-
-	<b>Step 2:</b> <a href="http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemDataOleDb.asp?frame=true">System.Data.OleDb</a> Provider:
+	<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. 
+		 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.
+		  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.
+		  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>, 
@@ -56,53 +42,59 @@
 		  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 http://www.microsoft.com/office/access/default.asp">MS Access</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>).
-
-		* On Windows systems: System.Data.OleDb will use libgda as well,
-		  if we can get it working, or OLE-DB as
-		  its engine.
 		  
 	</ul>
 
-	<b>Step 3:</b> <a href="http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemdatasqlclient.asp?frame=true">System.Data.SqlClient</a> Provider:
+	<b>Step 2:</b> <a href="http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemdatasqlclient.asp?frame=true">System.Data.SqlClient</a> Provider:
 
 	<ul>
-		* <p>System.Data.SqlClient will then become a
+		* <p><b>System.Data.SqlClient</b> 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>Once Step 1 has been completed and the PostgreSQL
-		  provider support has been moved to its own place at 
-		  Mono.Data.PostgreSQL, we will use 
-		  <a href="http://www.freetds.org/">FreeTDS</a> as the basis
-		  for providing access to Microsoft SQL Server databases.  Or we will
-		  use FreeTDS and jTDS (a 100% Java JDBC Provider for TDS) as a basis for
-		  creating a pure managed SQL Server provider.
+		* <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.	  
 		  
-		  <P>FreeTDS is a C API for Unix and Windows that implements 
-		  the TDS (Tabular Data Stream) protocol used in accessing 
-		  Microsoft SQL Server and Sybase databases.  A .NET Data Provider could be
-		  created for Sybase databases as well, but this would be put in Mono.Data.Sybase.
 	</ul>
 
-	<b>Step 4:</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:
+	<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 for those using ODBC.
-		  On Unix, <a href="http://www.unixodbc.org/">unixODBC</a> mabye used
-		  which has libodbc.so
-		  On Windows, uses the native ODBC libraries (odbc32.dll) that comes 
+		  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.
+		
+		* 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 Wwindows, get the latest MDAC 
-		  from Microsoft.  The mapping between these native shared libraries is handled 
+		  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
-		  In mono cvs, the file is mono/data/config.in
-		  		  
-		  <p>unixODBC works on Unix and Windows.  Well, I have not actually 
-		  used it on Cygwin, but it does build and install without problems.  
+		  
+		  <p>In mono cvs, the file is mono/data/config.in	  		  
 		  
 		  <p>unixODBC has providers for:
 		  Oracle, Microsoft SQL Server and Sybase (via FreeTDS), 
@@ -111,18 +103,39 @@
 		  
 	</ul>
 
-	<b>Step 5:</b> Other ADO.NET providers:
+	<b>Step 4:</b> Other ADO.NET providers:
 
 	<ul>
 		* <p>The idea in Microsoft .NET System.Data is to have
-		  a managed provider for each supported DBMS.  System.Data.SqlClient
-		  for Microsoft SQL Server.  
-		  System.Data.OracleClient for Oracle 8i and 9i.
-
-          <p>Two Mono.Data providers have been started: 
-          Mono.Data.MySql for the MySQL client/server database
-          and Mono.Data.SqliteClient for the SQL Lite database.
-          See Current Status for more information on these providers.
+		  a managed provider for each supported DBMS.
+		  
+		  <p>System.Data.SqlClient for Microsoft SQL Server.  See the
+		  Mono.Data.TdsClient provider.
+		  
+		  <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.
+		  
+		  <p>Mono.Data.SybaseClient for Sybase SQL Server.  See the
+		  Mono.Data.TdsClient provider.
+		  	  
+		  <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).
+          
+          <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).
+          
+          <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.
+          
+          <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,  
@@ -130,18 +143,16 @@
 		  Mono.Data.Berkeley, and SapDB.
 		  Others, of course, are welcomed.
 		  		  
-		  <p>System.Data has been designed so 
-		  non-database providers can be created too.
 	</ul>
 
-	<b>Step 6:</b> Create tools for ADO.NET
+	<b>Step 5:</b> Create tools for ADO.NET
 
 	<ul>
 		* <p><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 
-		  mcs/class/System.Data/Test/SqlSharpCli.cs
-		  It is written in C# and runs on Mono.
+		  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,
@@ -158,7 +169,7 @@
           gda# is the C# bindings to libgda which is a generic data access
           library that has providers for many databases.
           
-		* <p>ADO.NET Configuration command-line and GUI tools.  These tools have
+		* <p><b>ADO.NET Configuration command-line and GUI tools</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.  The tools would be written in C# and run on Mono.
@@ -166,58 +177,48 @@
 	</ul>
 	
 * Current Status
-
-	<p>We are working on Steps 1, 2, 4, and 5. We still have tons and tons of 
-	stuff still to do.  If you have any ideas, let us know on the [email protected]
 	
-	<p><b>For Step 1</b>, the <p>PostgreSQL</p> provider can connect, 
+	<p>The<b>PostgreSQL</p> provider as 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.  Currently, the PostgreSQL provider
-	exists in System.Data.SqlClient.  It needs to be moved 
-	to Mono.Data.PostgreSQL so the Microsoft SQL Server provider can
-	be placed in System.Data.SqlClient.
+	and use input parameters in its SQL, and SQL errors and exceptions for PostgreSQL
+	are working. 
+	
+	<p>The <b>PostgreSQL</b> provider
+	has been moved from System.Data.SqlClient to Mono.Data.PostgreSqlClient
+	so System.Data.SqlClient can be used for the Microsoft SQL Server provider.
 		
-	<p><b>For Step 2</b>, Rodrigo Moya has been working on <b>System.Data.OleDb</b>
-	which uses libgda
-	which is 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
+	<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.
+	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><b>For Step 3</b>, we need someone to start on the <b>Microsoft SQL Server</b> 
-	and <b>Sybase</b> support.  This can be done by creating 
-	a <b>FreeTDS</b> .NET Data Provider 
-	or C# bindings to FreeTDS native libraries.  A better solution, but a solution 
-	that would take longer, would be to create a pure
-	managed provider in C# that implements the TDS (Tabular DataStream) protocol.  TDS
-	is used to access Microsoft SQL Server and Sybase databases.  Another possibility
-	is to wrap System.Data.SqlClient around System.Data.OleDb since System.Data.OleDb on 
-	Mono uses <a href="http://www.gnome-db.org/">libgda</a> and libgda has 
-	a FreeTDS provider.  Yet another possibility, port 
-	the <a href="http://jtds.sourceforge.net/">jTDS</a> provider to a pure C# ADO.NET 
-	provider.  jTDS is a 100% pure Java (Type 4) open source JDBC 2.0 driver for 
-	the Microsoft SQL Server series (6.5, 7.x and 2000). 
+	<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>For Step 4</b>, Brian Ritchie has contributed an initial implementation of
-	an <b>ODBC</b> ADO.NET Provider that uses unixODBC on Linux and the native odbc
-	that comes on Windows.  There is basic implementations of 
+	<p><b>ODBC</b> support has been started by Brian Ritchie.
+	It uses unixODBC on Linux and uses native ODBC support on Windows.
+	There is basic implementations of 
     OdbcConnection, OdbcCommand, OdbcDataReader, OdbcParameter, and 
     OdbcParameterCollection.  The provider can execute queries and display result sets 
     (and ExecuteNonQuery too).  Currently, developers are working on the Parameter & 
     Transaction support.  It was tested on Debian against a DB2 7.2 UDB.  It was
-    also test on Windows XP against a Microsoft SQL Server 2000.
-	
-	<p><b>For Step 5</b>, we have create two Mono.Data providers so far: 
-	Mono.Data.MySql and Mono.Data.SqliteClient.
+    also tested on Windows XP against a Microsoft SQL Server 2000 database.
 	
 	<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.  This provider is 
-	found in Mono.Data.MySql.  Currently, we can connect, 
+	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.
@@ -230,43 +231,55 @@
 	The C# Bindings to MySQL are thanks to Brad Meril.
 
 	<p><b>Mono.Data.SqliteClient</b> is an ADO.NET provider for
-	the <b>SQL Lite</b> database.  SQL Lite can be 
-	found <a href"http://www.hwaci.com/sw/sqlite/download.html">here</a>.
-	There is SQL Lite binaries for Linux and Windows.  sqlite.dll on Windows 
+	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><b>DataSet, DataAdaptor, DataTable, DataRelation, DataRow, DataColumn,
-	DataColumnCollection, DataRowCollection, and others</b> need more work.
+	DataColumnCollection, DataRowCollection, and others</b> need more work.  There are
+	many classes that are just stubs and need to be implemented.  
 		
-	<p><b>Integration with ASP.NET</b> needs to be started, such as, data binding
+	<p><b>Integration with ASP.NET</b> has not been started, such as, data binding
 	to a System.Web.UI.WebControls.DataGrid.  This may involve implementing many classes
 	in System.Web and System.Data.  Gonzalo, Gaurav, Leen, Patrik, Duncan, and others are 
 	working very hard on the ASP.NET support. If you want to help, 
 	contact <a href="mailto:[email protected]">Gonzalo Paniagua Javier</a>
 	
-	<p><b>Integration with Windows.Forms</b> needs to be started, such as, data binding 
+	<p><b>Integration with Windows.Forms</b> has not been started, such as, data binding 
 	to a System.Windows.Forms.DataGrid.  This may involve implementing many classes
 	in System.Windows.Forms and System.Data.
 	
 	<p><b>Integration with <a href="http://gtk-sharp.sourceforge.net/">GTK#</a></b> 
-	needs to be started, such as, data binding
+	has not been started, such as, data binding
 	to a GtkTreeView.  This may involve creating new classes
 	to go between the glist data model and the ADO.NET data model.
 	Mike Kestner would be the best person to ask for help on GTK#.
 	
-	<p><b>Integration with QT#</b> needs to be started.  Any information on 
+	<p><b>Integration with QT#</b> has not been started.  Any information on 
 	how this can be done is appreciated.  Adam Treat would be the best 
 	person to ask about QT#.
 	
-	<p><b>Integration with GDA# and Libgnomedb#</b> which exists in GTK# needs
-	to be started.  Creating classes
-	to bind data between the data model in ADO.NET and the data model that
-	exists in <a href="http://www.gnome-db.org/">GDA</a> and 
-	<a href="http://www.gnome-db.org/">libgnomedb</a>.  There are some nifty widgets
+	<p><b>Integration with GDA#</b> has not been started.  It is 
+	included in the GTK# project, GDA# 
+	does not require GTK+ nor GNOME.  GDA# is C# bindings 
+	to <a href="http://www.gnome-db.org/">GDA</a> which
+	is an ADO/OLE-DB like layer for Linux provided as a C library.  Classes
+	that would bind data between the ADO.NET data model and the GDA data model will
+	need to be created.  Rodrigo Moya is the best person to contact about this.
+	
+	<p><b>Integration with GnomeDb#</b> has not been started.  It is
+	included in the GTK# project and uses GDA# for its data access model.
+	Creating classes to bind data between the data model in ADO.NET 
+	and the data model that	exists in GDA# and GnomeDb# will
+	need to be started.  GnomeDb# is C# bindings to
+	<a href="http://www.gnome-db.org/">GnomeDb</a> which uses 
+	<a href="http://www.gnome-db.org/">GDA</a> as its data access layer.  GnomeDb
+	is a C API in a library that contains
+	gtk+ widgets (GUI controls) for data access.  There are some nifty widgets
 	(GUI controls) that can be used, such as, GnomeDbGrid, GnomeDbBrowswer, 
 	GnomeDbSqlEditor, GnomeDbList, GnomeDbLogin, GnomeDbReportEditor, GnomeDbTableEditor, 
-	GnomeDbCombo, and GnomeDbForm.
+	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
 	the classes: DataSet, XmlDataDocument, and the method ExecuteXmlReader() that
@@ -290,22 +303,21 @@
 	<p>After some work done in System.Configuration, you can now do something
     like:   
 
-<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
+	<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;
+ Multiplexor mp = (Multiplexor) o;
     
-    // may be a string [] argument can help passing arguments
-    IDbConnection cnc = mp.CreateConnection (providerName);
-</pre>
+ // may be a string [] argument can help passing arguments
+ IDbConnection cnc = mp.CreateConnection (providerName);
     
-    <p>and in the machine.config file:
+ and in the machine.config file:
 
-<pre>
   <configuration>
    <configSections>
     <section name="mono.data"
@@ -320,13 +332,11 @@
      </multiplexor>
    </sectionGroup>
   </configuration>
-</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.
+ 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
     {
@@ -341,15 +351,14 @@
             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).
-
+ 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).
+</pre>
 	
 	<p><b>Building System.Data</b>
 	
@@ -382,14 +391,15 @@
 <pre>
  cd mcs/class/System.Data
  ../../nant/NAnt.exe
-</pre>
+</pref>
 			
-			This will automatically copy the System.Data.dll to Test.
-			If you need to do a clean for the System.Data.dll assembly,<br><br>
+		* This will automatically copy the System.Data.dll to Test.
+		  If you need to do a clean for the System.Data.dll assembly,<br><br>
 
-<pre>			
+<pre>
  cd mcs/class/System.Data
  ../../nant/NAnt.exe clean
+ 
 </pre>
 	</ul>
 

+ 168 - 0
doc/tds-providers

@@ -0,0 +1,168 @@
+* Design of the Microsoft SQL Server, Sybase, and TDS 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.
+
+		* Since Sybase and Microsoft SQL Server databases both 
+		  use the TDS protocol for data access, and other implementations 
+		  of TDS (FreeTDS and jTDS) have included support for multiple 
+		  versions of the TDS, we have decided to do the same.
+
+		* The TdsClient ADO.NET provider will be Mono's first provider 
+		  written completely in C# without any dependencies except 
+		  the usual suspects: corlib.dll, System.dll, and System.Xml.dll.
+
+
+* NEW ADO.NET PROVIDERS
+
+	<ul>
+		* <p>There will be three ADO.NET providers that will use TDS.	
+
+		  <p>1. 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.
+
+		  <p>2. 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 
+          which we will need to support as well, but it is used for 
+          Microsoft SQL Server 2000 databases.
+
+		  <p>3. 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 
+		  using TDS version 4.2 which can be used by older Sybase and 
+		  Microsoft SQL Server databases.
+		 
+	<ul>
+
+* BUILDING THE NEW PROVIDERS
+
+	<ul>
+		* All three providers will use common internal code 
+		at Mono.Data.TdsClient.Internal.  Any classes in 
+		Mono.Data.TdsClient.Internal will have the internal 
+		keyword and will be built with the assembly of that provider.
+
+		* <p>1. SqlClient will build its assembly System.Data using files 
+		  from System.Data, System.Data.SqlClient, System.Data.SqlTypes, 
+		  System.Data.Common, and Mono.Data.TdsClient.Internal.  
+		 
+		  <p>SqlClient 
+		  will only reference the usual
+		  suspects: corlib.dll, System.dll, and System.Xml.dll. SqlClient will be 
+		  a wrapper around TdsClient.Internal, but provide specific functionality to
+		  Microsoft SQL Server 7.0/2000 databases.
+
+		  <p>SqlClient build example:
+
+<pre>
+ mcs -target:library -out:System.Data.dll \
+   System.Data.SqlClient/*.cs \
+   ..\Mono.Data.TdsClient\Mono.Data.TdsClient.Internal\*.cs \
+   [any other classes in System.Data assembly...]  \
+   -r corlib.dll -r System.dll -r System.Xml.dll
+</pre>
+
+		* <p>2. SybaseClient will build its assembly Mono.Data.SybaseClient using 
+		  files from Mono.Data.SybaseClient and Mono.Data.TdsClient.Internal.  
+		  SybaseClient will reference
+          the usual suspects plus System.Data.dll  SybaseClient will 
+          be a wrapper around TdsClient.Internal, but provide specific 
+          functionality to Sybase.
+
+		  <p>SybaseClient build example:
+
+<pre>
+ mcs -target:library -out:Mono.Data.SybaseClient.dll \
+    Mono.Data.SybaseClient\*.cs \
+    ..\Mono.Data.TdsClient\Mono.Data.TdsClient.Internal\*.cs
+    -r corlib.dll -r System.dll -r System.Xml.dll -r System.Data.dll
+</pre>
+    
+		* <p>3. TdsClient will build its assembly Mono.Data.TdsClient 
+		  using files from Mono.Data.TdsClient
+          and Mono.Data.TdsClient.Internal.  TdsClient will reference the 
+          usual suspects plus System.Data.dll  TdsClient is a wrapper 
+          provider around TdsClient.Internal used for generic
+          unit tests.  TdsClient will a wrapper around TdsClient.Internal 
+          as a generic TDS provider 
+          and allow TDS configuration options not exposed in SqlClient 
+          nor SybaseClient, such as, TdsVersion will be exposed in TdsClient 
+          but not in SqlClient nor SybaseClient.
+
+		 <p>TdsClient build example:
+
+<pre>
+mcs -target:library -out:Mono.Data.TdsClient.dll \
+    Mono.Data.TdsClient\*.cs \
+    Mono.Data.TdsClient.Internal\*.cs \
+    -r corlib.dll -r System.dll -r System.Xml.dll -r System.Data.dll
+</pre>
+    
+* Classes in Mono.Data.TdsClient.Internal will:
+
+	<ul>
+
+		* use the internal keyword to prevent exposing these classes
+          to the System.Data.dll assembly.
+          
+        * implement the ADO.NET interfaces just like any other ADO.NET provider, such as,
+          IDbConnection, IDbCommand, IDataReader, IDataRecord, IDataAdapter, etc...
+          
+        * be sealed just like other providers
+        
+        * provide features to be directly used by the SqlClient and SybaseClient 
+          providers, such
+          as, setting the default TDS version: SqlClient to 7.0 and SybaseClient 
+          to 5.0 and TdsClient to 4.2.
+          
+        * be written completely in C# or IL assembly language (if need be).
+        
+        * implement the TDS protocol version 4.2, 5.0, 7.0, and 8.0. This 
+          is where most of the
+          work will take place.
+          
+        * be an internal ADO.NET provider to the public ADO.NET providers:
+          System.Data.SqlClient, Mono.Data.SybaseClient, and Mono.Data.TdsClient.
+
+* Implementation Details of the TDS Protocol
+
+	<ul>
+		* will be implemented in pure C# from scratch
+		
+		* will reside in Mono.Data.TdsClient.Internal  
+		
+		* will use FreeTDS and jTDS as rerferences.
+
+* More Information
+
+	<ul>
+		* <a href="http://www.freetds.org/">FreeTDS</a is C API that implements
+		the TDS protocol.  Has libraries for tds, ctlib, and dblib.  It builds
+		and runs on Windows, Linux, and other platforms.  FreeTDS provides
+		data access to Microsoft SQL Server and Sybase databases. 
+		
+		* <a href="http://jtds.sf.net/">jTDS</a> is a 100% Java JDBC provider
+		for Microsoft SQL Server and Sybase databases.
+		
+		* <a href="http://www.freetds.org/tds.html">TDS Protocol</a>
+
+* Contribute
+
+	<ul>
+
+		* Anybody willing to help?  If so, reply to this email or 
+		contact any of the people working on the ADO.NET support 
+		in Mono: Rodrigo Moya, Tim Coleman, Daniel Morgan, Brian Ritchie, 
+		Vladimir Vukicevic, Ville Palo, Franklin Wise, and others.
+

+ 2 - 1
doc/web/commands

@@ -32,7 +32,8 @@
 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,PostgreSQL Provider,postgresql.html,postgres.src
+2,PostgreSQL,postgresql.html,postgres.src
+2,SqlClient,tds-providers.html,tds-providers.src
 1,ASP.NET,asp-net.html,asp-net.src
 1,Java,java.html,java.src
 1,Windows.Forms,winforms.html,winforms.src

+ 1 - 0
doc/web/makefile

@@ -6,6 +6,7 @@ CORCOMPARE=../../../mcs/tools/corcompare
 OBJECTS=	\
 	deploy/ado-net.html					\
 		deploy/postgresql.html			\
+		deploy/tds-providers.html		\
 	deploy/anoncvs.html					\
 	deploy/asp-net.html					\
 	deploy/books.html					\

+ 152 - 142
web/ado-net

@@ -13,36 +13,22 @@
 
 	The current plan to implement ADO.NET is as follows:
 
-	<b>Step 1:</b> Initial <a href="http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemdatasqlclient.asp?frame=true">System.Data.SqlClient</a> Provider:
-
-	<ul>
-		* Initial implementation of System.Data.SqlClient is based on
-		  the <a href="http://www.postgresql.org/idocs/">PostgreSQL C API</a> which is a
-		  client API to the PostgreSQL DBMS.  PostgreSQL was chosen so we could quickly
-		  create and test the System.Data classes.
-		  
-		* Once the <a href="http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemdatasqlclient.asp?frame=true">System.Data.SqlClient</a>
-		  code is functional and is usable by other people, we willl move it to
-		  Mono.Data.PostgreSQL.  
-		  
-		* <a href="http://www.go-mono.com/postgresql.html">Current PostgreSQL ADO.NET Provider Status and Test Notes</a>
-
-	</ul>
-
-	<b>Step 2:</b> <a href="http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemDataOleDb.asp?frame=true">System.Data.OleDb</a> Provider:
+	<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. 
+		 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.
+		  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.
+		  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>, 
@@ -56,53 +42,59 @@
 		  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 http://www.microsoft.com/office/access/default.asp">MS Access</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>).
-
-		* On Windows systems: System.Data.OleDb will use libgda as well,
-		  if we can get it working, or OLE-DB as
-		  its engine.
 		  
 	</ul>
 
-	<b>Step 3:</b> <a href="http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemdatasqlclient.asp?frame=true">System.Data.SqlClient</a> Provider:
+	<b>Step 2:</b> <a href="http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemdatasqlclient.asp?frame=true">System.Data.SqlClient</a> Provider:
 
 	<ul>
-		* <p>System.Data.SqlClient will then become a
+		* <p><b>System.Data.SqlClient</b> 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>Once Step 1 has been completed and the PostgreSQL
-		  provider support has been moved to its own place at 
-		  Mono.Data.PostgreSQL, we will use 
-		  <a href="http://www.freetds.org/">FreeTDS</a> as the basis
-		  for providing access to Microsoft SQL Server databases.  Or we will
-		  use FreeTDS and jTDS (a 100% Java JDBC Provider for TDS) as a basis for
-		  creating a pure managed SQL Server provider.
+		* <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.	  
 		  
-		  <P>FreeTDS is a C API for Unix and Windows that implements 
-		  the TDS (Tabular Data Stream) protocol used in accessing 
-		  Microsoft SQL Server and Sybase databases.  A .NET Data Provider could be
-		  created for Sybase databases as well, but this would be put in Mono.Data.Sybase.
 	</ul>
 
-	<b>Step 4:</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:
+	<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 for those using ODBC.
-		  On Unix, <a href="http://www.unixodbc.org/">unixODBC</a> mabye used
-		  which has libodbc.so
-		  On Windows, uses the native ODBC libraries (odbc32.dll) that comes 
+		  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.
+		
+		* 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 Wwindows, get the latest MDAC 
-		  from Microsoft.  The mapping between these native shared libraries is handled 
+		  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
-		  In mono cvs, the file is mono/data/config.in
-		  		  
-		  <p>unixODBC works on Unix and Windows.  Well, I have not actually 
-		  used it on Cygwin, but it does build and install without problems.  
+		  
+		  <p>In mono cvs, the file is mono/data/config.in	  		  
 		  
 		  <p>unixODBC has providers for:
 		  Oracle, Microsoft SQL Server and Sybase (via FreeTDS), 
@@ -111,18 +103,39 @@
 		  
 	</ul>
 
-	<b>Step 5:</b> Other ADO.NET providers:
+	<b>Step 4:</b> Other ADO.NET providers:
 
 	<ul>
 		* <p>The idea in Microsoft .NET System.Data is to have
-		  a managed provider for each supported DBMS.  System.Data.SqlClient
-		  for Microsoft SQL Server.  
-		  System.Data.OracleClient for Oracle 8i and 9i.
-
-          <p>Two Mono.Data providers have been started: 
-          Mono.Data.MySql for the MySQL client/server database
-          and Mono.Data.SqliteClient for the SQL Lite database.
-          See Current Status for more information on these providers.
+		  a managed provider for each supported DBMS.
+		  
+		  <p>System.Data.SqlClient for Microsoft SQL Server.  See the
+		  Mono.Data.TdsClient provider.
+		  
+		  <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.
+		  
+		  <p>Mono.Data.SybaseClient for Sybase SQL Server.  See the
+		  Mono.Data.TdsClient provider.
+		  	  
+		  <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).
+          
+          <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).
+          
+          <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.
+          
+          <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,  
@@ -130,18 +143,16 @@
 		  Mono.Data.Berkeley, and SapDB.
 		  Others, of course, are welcomed.
 		  		  
-		  <p>System.Data has been designed so 
-		  non-database providers can be created too.
 	</ul>
 
-	<b>Step 6:</b> Create tools for ADO.NET
+	<b>Step 5:</b> Create tools for ADO.NET
 
 	<ul>
 		* <p><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 
-		  mcs/class/System.Data/Test/SqlSharpCli.cs
-		  It is written in C# and runs on Mono.
+		  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,
@@ -158,7 +169,7 @@
           gda# is the C# bindings to libgda which is a generic data access
           library that has providers for many databases.
           
-		* <p>ADO.NET Configuration command-line and GUI tools.  These tools have
+		* <p><b>ADO.NET Configuration command-line and GUI tools</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.  The tools would be written in C# and run on Mono.
@@ -166,58 +177,48 @@
 	</ul>
 	
 * Current Status
-
-	<p>We are working on Steps 1, 2, 4, and 5. We still have tons and tons of 
-	stuff still to do.  If you have any ideas, let us know on the [email protected]
 	
-	<p><b>For Step 1</b>, the <p>PostgreSQL</p> provider can connect, 
+	<p>The<b>PostgreSQL</p> provider as 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.  Currently, the PostgreSQL provider
-	exists in System.Data.SqlClient.  It needs to be moved 
-	to Mono.Data.PostgreSQL so the Microsoft SQL Server provider can
-	be placed in System.Data.SqlClient.
+	and use input parameters in its SQL, and SQL errors and exceptions for PostgreSQL
+	are working. 
+	
+	<p>The <b>PostgreSQL</b> provider
+	has been moved from System.Data.SqlClient to Mono.Data.PostgreSqlClient
+	so System.Data.SqlClient can be used for the Microsoft SQL Server provider.
 		
-	<p><b>For Step 2</b>, Rodrigo Moya has been working on <b>System.Data.OleDb</b>
-	which uses libgda
-	which is 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
+	<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.
+	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><b>For Step 3</b>, we need someone to start on the <b>Microsoft SQL Server</b> 
-	and <b>Sybase</b> support.  This can be done by creating 
-	a <b>FreeTDS</b> .NET Data Provider 
-	or C# bindings to FreeTDS native libraries.  A better solution, but a solution 
-	that would take longer, would be to create a pure
-	managed provider in C# that implements the TDS (Tabular DataStream) protocol.  TDS
-	is used to access Microsoft SQL Server and Sybase databases.  Another possibility
-	is to wrap System.Data.SqlClient around System.Data.OleDb since System.Data.OleDb on 
-	Mono uses <a href="http://www.gnome-db.org/">libgda</a> and libgda has 
-	a FreeTDS provider.  Yet another possibility, port 
-	the <a href="http://jtds.sourceforge.net/">jTDS</a> provider to a pure C# ADO.NET 
-	provider.  jTDS is a 100% pure Java (Type 4) open source JDBC 2.0 driver for 
-	the Microsoft SQL Server series (6.5, 7.x and 2000). 
+	<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>For Step 4</b>, Brian Ritchie has contributed an initial implementation of
-	an <b>ODBC</b> ADO.NET Provider that uses unixODBC on Linux and the native odbc
-	that comes on Windows.  There is basic implementations of 
+	<p><b>ODBC</b> support has been started by Brian Ritchie.
+	It uses unixODBC on Linux and uses native ODBC support on Windows.
+	There is basic implementations of 
     OdbcConnection, OdbcCommand, OdbcDataReader, OdbcParameter, and 
     OdbcParameterCollection.  The provider can execute queries and display result sets 
     (and ExecuteNonQuery too).  Currently, developers are working on the Parameter & 
     Transaction support.  It was tested on Debian against a DB2 7.2 UDB.  It was
-    also test on Windows XP against a Microsoft SQL Server 2000.
-	
-	<p><b>For Step 5</b>, we have create two Mono.Data providers so far: 
-	Mono.Data.MySql and Mono.Data.SqliteClient.
+    also tested on Windows XP against a Microsoft SQL Server 2000 database.
 	
 	<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.  This provider is 
-	found in Mono.Data.MySql.  Currently, we can connect, 
+	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.
@@ -230,43 +231,55 @@
 	The C# Bindings to MySQL are thanks to Brad Meril.
 
 	<p><b>Mono.Data.SqliteClient</b> is an ADO.NET provider for
-	the <b>SQL Lite</b> database.  SQL Lite can be 
-	found <a href"http://www.hwaci.com/sw/sqlite/download.html">here</a>.
-	There is SQL Lite binaries for Linux and Windows.  sqlite.dll on Windows 
+	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><b>DataSet, DataAdaptor, DataTable, DataRelation, DataRow, DataColumn,
-	DataColumnCollection, DataRowCollection, and others</b> need more work.
+	DataColumnCollection, DataRowCollection, and others</b> need more work.  There are
+	many classes that are just stubs and need to be implemented.  
 		
-	<p><b>Integration with ASP.NET</b> needs to be started, such as, data binding
+	<p><b>Integration with ASP.NET</b> has not been started, such as, data binding
 	to a System.Web.UI.WebControls.DataGrid.  This may involve implementing many classes
 	in System.Web and System.Data.  Gonzalo, Gaurav, Leen, Patrik, Duncan, and others are 
 	working very hard on the ASP.NET support. If you want to help, 
 	contact <a href="mailto:[email protected]">Gonzalo Paniagua Javier</a>
 	
-	<p><b>Integration with Windows.Forms</b> needs to be started, such as, data binding 
+	<p><b>Integration with Windows.Forms</b> has not been started, such as, data binding 
 	to a System.Windows.Forms.DataGrid.  This may involve implementing many classes
 	in System.Windows.Forms and System.Data.
 	
 	<p><b>Integration with <a href="http://gtk-sharp.sourceforge.net/">GTK#</a></b> 
-	needs to be started, such as, data binding
+	has not been started, such as, data binding
 	to a GtkTreeView.  This may involve creating new classes
 	to go between the glist data model and the ADO.NET data model.
 	Mike Kestner would be the best person to ask for help on GTK#.
 	
-	<p><b>Integration with QT#</b> needs to be started.  Any information on 
+	<p><b>Integration with QT#</b> has not been started.  Any information on 
 	how this can be done is appreciated.  Adam Treat would be the best 
 	person to ask about QT#.
 	
-	<p><b>Integration with GDA# and Libgnomedb#</b> which exists in GTK# needs
-	to be started.  Creating classes
-	to bind data between the data model in ADO.NET and the data model that
-	exists in <a href="http://www.gnome-db.org/">GDA</a> and 
-	<a href="http://www.gnome-db.org/">libgnomedb</a>.  There are some nifty widgets
+	<p><b>Integration with GDA#</b> has not been started.  It is 
+	included in the GTK# project, GDA# 
+	does not require GTK+ nor GNOME.  GDA# is C# bindings 
+	to <a href="http://www.gnome-db.org/">GDA</a> which
+	is an ADO/OLE-DB like layer for Linux provided as a C library.  Classes
+	that would bind data between the ADO.NET data model and the GDA data model will
+	need to be created.  Rodrigo Moya is the best person to contact about this.
+	
+	<p><b>Integration with GnomeDb#</b> has not been started.  It is
+	included in the GTK# project and uses GDA# for its data access model.
+	Creating classes to bind data between the data model in ADO.NET 
+	and the data model that	exists in GDA# and GnomeDb# will
+	need to be started.  GnomeDb# is C# bindings to
+	<a href="http://www.gnome-db.org/">GnomeDb</a> which uses 
+	<a href="http://www.gnome-db.org/">GDA</a> as its data access layer.  GnomeDb
+	is a C API in a library that contains
+	gtk+ widgets (GUI controls) for data access.  There are some nifty widgets
 	(GUI controls) that can be used, such as, GnomeDbGrid, GnomeDbBrowswer, 
 	GnomeDbSqlEditor, GnomeDbList, GnomeDbLogin, GnomeDbReportEditor, GnomeDbTableEditor, 
-	GnomeDbCombo, and GnomeDbForm.
+	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
 	the classes: DataSet, XmlDataDocument, and the method ExecuteXmlReader() that
@@ -290,22 +303,21 @@
 	<p>After some work done in System.Configuration, you can now do something
     like:   
 
-<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
+	<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;
+ Multiplexor mp = (Multiplexor) o;
     
-    // may be a string [] argument can help passing arguments
-    IDbConnection cnc = mp.CreateConnection (providerName);
-</pre>
+ // may be a string [] argument can help passing arguments
+ IDbConnection cnc = mp.CreateConnection (providerName);
     
-    <p>and in the machine.config file:
+ and in the machine.config file:
 
-<pre>
   <configuration>
    <configSections>
     <section name="mono.data"
@@ -320,13 +332,11 @@
      </multiplexor>
    </sectionGroup>
   </configuration>
-</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.
+ 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
     {
@@ -341,15 +351,14 @@
             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).
-
+ 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).
+</pre>
 	
 	<p><b>Building System.Data</b>
 	
@@ -382,14 +391,15 @@
 <pre>
  cd mcs/class/System.Data
  ../../nant/NAnt.exe
-</pre>
+</pref>
 			
-			This will automatically copy the System.Data.dll to Test.
-			If you need to do a clean for the System.Data.dll assembly,<br><br>
+		* This will automatically copy the System.Data.dll to Test.
+		  If you need to do a clean for the System.Data.dll assembly,<br><br>
 
-<pre>			
+<pre>
  cd mcs/class/System.Data
  ../../nant/NAnt.exe clean
+ 
 </pre>
 	</ul>
 

+ 168 - 0
web/tds-providers

@@ -0,0 +1,168 @@
+* Design of the Microsoft SQL Server, Sybase, and TDS 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.
+
+		* Since Sybase and Microsoft SQL Server databases both 
+		  use the TDS protocol for data access, and other implementations 
+		  of TDS (FreeTDS and jTDS) have included support for multiple 
+		  versions of the TDS, we have decided to do the same.
+
+		* The TdsClient ADO.NET provider will be Mono's first provider 
+		  written completely in C# without any dependencies except 
+		  the usual suspects: corlib.dll, System.dll, and System.Xml.dll.
+
+
+* NEW ADO.NET PROVIDERS
+
+	<ul>
+		* <p>There will be three ADO.NET providers that will use TDS.	
+
+		  <p>1. 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.
+
+		  <p>2. 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 
+          which we will need to support as well, but it is used for 
+          Microsoft SQL Server 2000 databases.
+
+		  <p>3. 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 
+		  using TDS version 4.2 which can be used by older Sybase and 
+		  Microsoft SQL Server databases.
+		 
+	<ul>
+
+* BUILDING THE NEW PROVIDERS
+
+	<ul>
+		* All three providers will use common internal code 
+		at Mono.Data.TdsClient.Internal.  Any classes in 
+		Mono.Data.TdsClient.Internal will have the internal 
+		keyword and will be built with the assembly of that provider.
+
+		* <p>1. SqlClient will build its assembly System.Data using files 
+		  from System.Data, System.Data.SqlClient, System.Data.SqlTypes, 
+		  System.Data.Common, and Mono.Data.TdsClient.Internal.  
+		 
+		  <p>SqlClient 
+		  will only reference the usual
+		  suspects: corlib.dll, System.dll, and System.Xml.dll. SqlClient will be 
+		  a wrapper around TdsClient.Internal, but provide specific functionality to
+		  Microsoft SQL Server 7.0/2000 databases.
+
+		  <p>SqlClient build example:
+
+<pre>
+ mcs -target:library -out:System.Data.dll \
+   System.Data.SqlClient/*.cs \
+   ..\Mono.Data.TdsClient\Mono.Data.TdsClient.Internal\*.cs \
+   [any other classes in System.Data assembly...]  \
+   -r corlib.dll -r System.dll -r System.Xml.dll
+</pre>
+
+		* <p>2. SybaseClient will build its assembly Mono.Data.SybaseClient using 
+		  files from Mono.Data.SybaseClient and Mono.Data.TdsClient.Internal.  
+		  SybaseClient will reference
+          the usual suspects plus System.Data.dll  SybaseClient will 
+          be a wrapper around TdsClient.Internal, but provide specific 
+          functionality to Sybase.
+
+		  <p>SybaseClient build example:
+
+<pre>
+ mcs -target:library -out:Mono.Data.SybaseClient.dll \
+    Mono.Data.SybaseClient\*.cs \
+    ..\Mono.Data.TdsClient\Mono.Data.TdsClient.Internal\*.cs
+    -r corlib.dll -r System.dll -r System.Xml.dll -r System.Data.dll
+</pre>
+    
+		* <p>3. TdsClient will build its assembly Mono.Data.TdsClient 
+		  using files from Mono.Data.TdsClient
+          and Mono.Data.TdsClient.Internal.  TdsClient will reference the 
+          usual suspects plus System.Data.dll  TdsClient is a wrapper 
+          provider around TdsClient.Internal used for generic
+          unit tests.  TdsClient will a wrapper around TdsClient.Internal 
+          as a generic TDS provider 
+          and allow TDS configuration options not exposed in SqlClient 
+          nor SybaseClient, such as, TdsVersion will be exposed in TdsClient 
+          but not in SqlClient nor SybaseClient.
+
+		 <p>TdsClient build example:
+
+<pre>
+mcs -target:library -out:Mono.Data.TdsClient.dll \
+    Mono.Data.TdsClient\*.cs \
+    Mono.Data.TdsClient.Internal\*.cs \
+    -r corlib.dll -r System.dll -r System.Xml.dll -r System.Data.dll
+</pre>
+    
+* Classes in Mono.Data.TdsClient.Internal will:
+
+	<ul>
+
+		* use the internal keyword to prevent exposing these classes
+          to the System.Data.dll assembly.
+          
+        * implement the ADO.NET interfaces just like any other ADO.NET provider, such as,
+          IDbConnection, IDbCommand, IDataReader, IDataRecord, IDataAdapter, etc...
+          
+        * be sealed just like other providers
+        
+        * provide features to be directly used by the SqlClient and SybaseClient 
+          providers, such
+          as, setting the default TDS version: SqlClient to 7.0 and SybaseClient 
+          to 5.0 and TdsClient to 4.2.
+          
+        * be written completely in C# or IL assembly language (if need be).
+        
+        * implement the TDS protocol version 4.2, 5.0, 7.0, and 8.0. This 
+          is where most of the
+          work will take place.
+          
+        * be an internal ADO.NET provider to the public ADO.NET providers:
+          System.Data.SqlClient, Mono.Data.SybaseClient, and Mono.Data.TdsClient.
+
+* Implementation Details of the TDS Protocol
+
+	<ul>
+		* will be implemented in pure C# from scratch
+		
+		* will reside in Mono.Data.TdsClient.Internal  
+		
+		* will use FreeTDS and jTDS as rerferences.
+
+* More Information
+
+	<ul>
+		* <a href="http://www.freetds.org/">FreeTDS</a is C API that implements
+		the TDS protocol.  Has libraries for tds, ctlib, and dblib.  It builds
+		and runs on Windows, Linux, and other platforms.  FreeTDS provides
+		data access to Microsoft SQL Server and Sybase databases. 
+		
+		* <a href="http://jtds.sf.net/">jTDS</a> is a 100% Java JDBC provider
+		for Microsoft SQL Server and Sybase databases.
+		
+		* <a href="http://www.freetds.org/tds.html">TDS Protocol</a>
+
+* Contribute
+
+	<ul>
+
+		* Anybody willing to help?  If so, reply to this email or 
+		contact any of the people working on the ADO.NET support 
+		in Mono: Rodrigo Moya, Tim Coleman, Daniel Morgan, Brian Ritchie, 
+		Vladimir Vukicevic, Ville Palo, Franklin Wise, and others.
+

+ 2 - 1
web/web/commands

@@ -32,7 +32,8 @@
 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,PostgreSQL Provider,postgresql.html,postgres.src
+2,PostgreSQL,postgresql.html,postgres.src
+2,SqlClient,tds-providers.html,tds-providers.src
 1,ASP.NET,asp-net.html,asp-net.src
 1,Java,java.html,java.src
 1,Windows.Forms,winforms.html,winforms.src

+ 1 - 0
web/web/makefile

@@ -6,6 +6,7 @@ CORCOMPARE=../../../mcs/tools/corcompare
 OBJECTS=	\
 	deploy/ado-net.html					\
 		deploy/postgresql.html			\
+		deploy/tds-providers.html		\
 	deploy/anoncvs.html					\
 	deploy/asp-net.html					\
 	deploy/books.html					\