* ADO.NET
- The coordinator for the ADO.NET implementation is
- <a href="mailto:rodrigo@ximian.com">Rodrigo Moya</a>,
- with the collaboration of:
- <a href="mailto:danmorg@sc.rr.com">Daniel Morgan</a>,
- <a href="mailto:tim@timcoleman.com">Tim Coleman</a>,
- <a href="mailto:brianlritchie@hotmail.com">Brian Ritchie</a>, and
- <a href="mailto:vladimir@pobox.com">Vladimir Vukicevic</a>.
-
+<p>Mono's ADO.NET Developers:
-* Action plan
+<table border=1>
- The current plan to implement ADO.NET is as follows:
+<tr>
+ <td><b>Developer</b></td>
+ <td><b>Email</b></td>
+ <td><b>Contribution</b></td>
+</tr>
- <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>
+<tr>
+ <td>Rodrigo Moya</td>
+ <td>rodrigo -AT-<br> ximian.comNOSPAM</td>
+ <td>ADO.NET coordinator,<br> OLE DB provider,<br> and tests</td>
+</tr>
- <b>Step 2:</b> <a href="http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemdatasqlclient.asp?frame=true">System.Data.SqlClient</a> Provider:
+<tr>
+ <td>Daniel Morgan</td>
+ <td>danmorg -AT-<br> sc.rr.comNOSPAM</td>
+ <td>MySQL, PostgreSQL, <br>Oracle providers,<br> and tests</td>
+</tr>
- <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>
+<tr>
+ <td>Tim Coleman</td>
+ <td>tim -AT- <br>timcoleman.comNOSPAM</td>
+ <td>Microsoft SQL Server, <br>Sybase, <br>TDS providers,<br> Oracle,
+ <br>and tests.<br>
+ He has
+ contributed <br>to other parts <br>of Mono too, <br>such as,
+ <br>EnterpriseServices,
+ XML, <br>and WebServices.</td>
+</tr>
+
+<tr>
+ <td>Brian Ritchie</td>
+ <td>brianlritchie -AT-<br> hotmail.comNOSPAM</td>
+ <td>ODBC provider <br>and the ProviderFactory <br>in Mono.Data</td>
+</tr>
+
+<tr>
+ <td>Vladimir Vukicevic</td>
+ <td>vladimir -AT-<br> pobox.comNOSPAM</td>
+ <td>SQL Lite provider. <br> He has contributed to GTK# <br>and mPhoto too.</td>
+</tr>
+
+<tr>
+ <td>Christopher Bockner</td>
+ <td>cleared -AT-<br> rogers.comNOSPAM</td>
+ <td>IBM DB2 Universal <br>Database provider</td>
+</tr>
+
+<tr>
+ <td>Ville Palo</td>
+ <td>vi64pa -AT-<br> koti.soon.fiNOSPAM</td>
+ <td>XML stuff <br>in System.Data <br>including DataSet <br>
+ and XmlDataDocument, <br>and tests</td>
+</tr>
+
+<tr>
+ <td>Gonzalo Paniagua Javier</td>
+ <td>gonzalo -AT-<br> ximian.comNOSPAM</td>
+ <td>Integration between <br>System.Web and <br>System.Data</td>
+</tr>
+
+<tr>
+ <td>Gaurav Vaish</td>
+ <td>gvaish -AT-<br> iitk.ac.inNOSPAM</td>
+ <td>Web controls</td>
+</tr>
+
+<tr>
+ <td>Phillip Jerkins</td>
+ <td>Phillip.Jerkins -AT-<br> morgankeegan.comNOSPAM</td>
+ <td>Named Instance support <br>in System.Data.SqlClient</td>
+</tr>
+
+</table>
+
+** Bugs and Feature Requests
- <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>
+
+ <li>Bugs with Mono or any data provider in Mono should be reported
+ in Mono's Bugzilla <a href="http://bugzilla.ximian.com/">here</a>. If you
+ do not have a Bugzilla user account, it is free
+ and easy to create
+ one <a href="http://bugzilla.ximian.com/createaccount.cgi">here</a>.</li>
- <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.
-
- * 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>
+ <li>Any RFE (Request For Enhancement) for features missing or new functionality
+ should be entered as a bug in Bugzilla too</li>
- <b>Step 4:</b> Other ADO.NET providers:
+</ul>
+
+** ADO.NET Data Providers
+
+<p>List of ADO.NET Data Providers working in Mono:
+
+<ul>
+ <li><a href="http://www.go-mono.com/ibmdb2.html">IBM DB2 Universal Database</a></li>
+ <li><a href="http://www.go-mono.com/mysql.html">MySQL</a></li>
+ <li><a href="http://www.go-mono.com/odbc.html">ODBC</a></li>
+ <li><a href="http://www.go-mono.com/oracle.html">Oracle</a></li>
+ <li><a href="http://www.go-mono.com/oledb.html">OLE DB</a></li>
+ <li><a href="http://www.go-mono.com/postgresql.html">PostgreSQL</a></li>
+ <li><a href="http://www.go-mono.com/sqlclient.html">Microsoft SQL Server</a></li>
+ <li><a href="http://www.go-mono.com/sqlite.html">SQL Lite</a></li>
+ <li><a href="http://www.go-mono.com/sybase.html">Sybase</a></li>
+ <li><a href="http://www.go-mono.com/tdsclient.html">TDS Generic</a></li>
+</ul>
- <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.
-
- <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>
+<p>Providers which we do not have, but we would like to have. Currently,
+ some of these databases are supported via the ODBC or OLE DB providers.
- <b>Step 5:</b> Create tools for ADO.NET
+<ul>
+ <li><a href="http://msdn.microsoft.com/library/en-us/dnsql2k/html/sqlxml_intromanagedclasses.asp?frame=true">Managed Classes for SqlXml</a> which is
+ a .NET data provider for retrieving XML data from a Microsoft SQL Server 2000 database. The System.Data.SqlClient provider
+ in Mono can be used as a starting point at mcs/class/System.Data/System.Data.SqlClient.</li>
+ <li><a href="http://www.hughes.com.au/">miniSQL</a></li>
+ <li><a href="http://www.sleepycat.com/">BerkeleyDB (Sleepycat)</a></li>
+ <li><a href="http://www.sapdb.org/">SapDB</a></li>
+ <li><a href="http://www-3.ibm.com/software/data/informix/">Informix</a></li>
+ <li><a href="http://msdn.microsoft.com/vfoxpro/">Foxpro</a></li>
+ <li>Microsoft Access - could be done by creating C# bindings to <a href="http://mdbtools.sourceforge.net">MDB Tools</a></li>
+ <li>dbase or xbase type database files</li>
+ <li>Others are welcome</li>
+</ul>
- <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
+<p>External Projects that have created ADO.NET Providers that work on Mono:
+
+<ul>
+
+ <li><a href="http://www.go-mono.com/firebird.html">Firebird Interbase</a></li> is a
+ Firebird SQL Managed data provider. It can be used with Interbase databases too. It
+ is written in 100%C# and does not require a client library. Works on .NET and Mono.</a>
+ <li><a href="http://gborg.postgresql.org/project/npgsql/projdisplay.php">Npgsql</a> is a
+ PostgreSQL Managed data provider written
+ in 100% C#, does not require a client library, and works on .NET and Mono</li>
+ <li><a href="http://sourceforge.net/projects/mysqlnet/">MySQLNet</a> is a
+ MySQL Managed data provider written in 100% C#, does not
+ require a client library, and works on .NET and Mono</li>
+</ul>
+
+** Tools
+
+<p>Some tools that can be used for ADO.NET and other technologies (ASP.NET, XML, etc).
+
+<ul>
+ <li><b>SQL# CLI</b> - a SQL query tool with a command-line interface.
+ It can be used to enter and execute SQL statements or
+ execute a batch of SQL commands from a file. It can
+ be used to test connection strings, connect to various ADO.NET
+ providers, save output to text, html, or xml. It is a work-in-progress.
+ The SQL# CLI is distributed with the
+ Mono runtime and class libraries as an executable assembly sqlsharp.exe.
+ The source to SQL# CLI can be found in the mcs source at
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#.
+ </li>
+
+ <li><p><b>SQL# GUI - a graphical SQL query tool</b> allows a user
+ to enter SQL commands in a top panel which is a text editor. It
+ has a toolbar and menu for various tasks, such as, executing
+ SQL commands one-at-a-time or in a batch. The results would appear
+ in a bottom panel in a grid or could be saved to a file (xml, html, csv).
+ Also, the bottom panel would allow logging of SQL command executed.
+ Currently, there is a <a href="http://go-mono.com/images/sqlsharp.png">SQL# For GTK#</a> which
+ provides a GUI interface using the <a href="http://gtk-sharp.sourceforge.net">Gtk#</a> toolkit. SQL# For GTK#
+ is a work-in-progress and can be found in the mcs source at
+ mcs/tools/SqlSharp/gui/gtk-sharp</li>
+</ul>
+
+<p>Tools we would like to have, but they have not been created yet:
+
+<ul>
+ <li><b>XML Schema Definition tool</b> <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cptools/html/cpconxmlschemadefinitiontoolxsdexe.asp">xsd.exe</a> needs
+ to be created. Maybe this TODO item should be at the System.XML web page instead.
+
+ <ul>
+ <li>This tool
+ would work like the xsd.exe tool included with
+ the .NET Framework. The Xsd.exe tools has the\r
+ following uses:\r
+ <ul>\r
+ <li><b>XDR to XSD</b> - used to generate an XML schema from an XDR (XML Data Reduced schema) file. \r
+ XDR was used by Microsoft prior to XSD becoming a W3C recommendation. So, this needs\r
+ to be supported for legacy reasons</li>\r
+ <li><b>XML to XSD</b> - used to generate an XML schema from an XML file</li> \r
+ <li><b>XSD to DataSet</b> - used to generate DataSet classes from an XSD schema file. The\r
+ DataSet classes created can then be used with XML data</li>\r
+ <li><b>XSD to Classes</b> - used to generate classes from an XSD schema file. The \r
+ classes created can be used with System.XML.Serialization.XMLSerializer \r
+ to read and write XML code that follows the schema</li>\r
+ <li><b>Classes to XSD</b> - used to generate an XML schema \r
+ from type(s) in a assembly file. The \r
+ XML schema created by the tool defines the XML format used \r
+ by System.XML.Serialization.XMLSerializer</li>\r
+ </ul>\r
+ <li>Xsd.exe is used to manipulate XML schemas that \r
+ follow the http://www.w3.org/XML/Schema">XML Schema Definition (XSD)</a> language \r
+ recommended by the <a href="http://w3.org/">World Wide Web Consortium (W3C)</a></li>\r
+ \r
+ <li>How this tool could be created:\r
+ <ul>\r
+ <li>Write xsd.exe in C# and run on Mono</li>\r
+ <li>Make sure we have XML Schema support in System.Xml.Schema. Currently,\r
+ it is wrapped around libxlst</li>\r
+ <li>XML serialization support in System.Data classes</li>\r
+ <li>Create the TypedDataSetGenerator class in System.Data</li>\r
+ <li>Using CodeDOM or Reflection.Emit to create code</li>\r
+ <li>Make sure DataSet, XmlDataDocument, and related classes \r
+ are implemented fully</li>\r
+ </ul>\r
+ </li> \r
+
+ </li>
+ </ul>
+ </li>
- <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.
-
- * <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>Application XML Configuration File Editor</b> - a tool
+ to create and edit an application configuration file, such as,
+ we have a .net application named Accouting.exe, the tool could edit
+ the application configuration file Accounting.exe.config so a user could
+ connect to the database used by the program. This tool has not
+ been created.</li>
- </ul>
+ <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>bebased on the Application XML Configuration File Editor</li>
+ <li>setup DSNs for the ODBC and OLE-DB
+ providers and configurations for
+ their underlying libraries (unixODBC and libgda)</li>
+ <li>setup configurations for the Mono.Data.ProviderFactory
+ that Brian Ritchie created</li>
+ <li>setup native database client library configurations too, such as,
+ freetds.conf for Microsoft SQL Server and Sybase</li>
+ </ul>
+ </li>
+
+</ul>
+
+** Extra Classes in Mono ADO.NET
+
+ <p>An ADO.NET <a href="http://www.go-mono.com/provider-factory.html">Provider Factory</a>
+ was created by Brian Ritchie. The
+ Provider Factory is a way to dynamically create
+ connections, commands, parameters, and data adapters based on configuration
+ information.
-* Current Status
+** Current Status
+
+ <p>Various ADO.NET Providers have been created at various stages of
+ development including:
+ Firebird/Interbase, IBM DB2 Universal Database, MySQL, ODBC, OLE DB, Oracle,
+ PostgreSQL, SQL Lite, Sybase, Microsoft SQL Server, and TDS Generic.
+ See their respective web page for more information.
- <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><b>Data Relations</b> via DataRelation, DataRelationCollection, and
+ other classes have not been implemented
- <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>Constraints</b> need lots of work
- <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>XML Schema Definition tool</b> xsd.exe that is included
+ in the .NET Framework has not been created for Mono
- <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><b>TypeDataSetGenerator</b> needs to be stubbed and implemented.
<p><b>DataSet, DataAdaptor, DataTable, DataRelation, DataRow, DataColumn,
DataColumnCollection, DataRowCollection, and others</b> need more work. There are
- many classes that are just stubs and need to be implemented.
+ many classes that are just stubs and need to be implemented. Ville Palo has been
+ doing much testing here.
+
+ <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. Ville Palo has been
+ heavily modifying DataSet, XmlDataDocument, and other classes for reading
+ and writing XML. XML Serialization support in DataSet needs to be implemented.
- <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:gonzalo@ximian.com">Gonzalo Paniagua Javier</a>
+ <p><b>Integration with ASP.NET</b> has been created. Data binding of
+ a DataTable in a DataSet to a System.Web.UI.WebControls.DataGrid works. Data binding
+ of other types works too.
+
+ <p><b>Database Access from ASP.NET</b>:
+ <ul>
+ <li>Take a look at xsp in cvs and look at the examples in test: dbpage1.aspx
+ and dbpage2.aspx:
+ <ul>
+ <li>Notice that the namespace System.Data is imported via <b>import</b></li>
+ <li>A NameValueCollection is gotten using ConfigurationSettings.AppSetings. These
+ settings are gotten from the file server.exe.config which is a XML file. The XML
+ file has a section appSettings. In the appSettings section, you have keys
+ for DBProviderAssembly, DBConnectionType, and DBConnectionString.
+ <ul>
+ <li><b>DBProviderAssembly</b> is the assembly of the ADO.NET provider.
+ For example:
+ "Mono.Data.PostgreSqlClient"</li>
+ <li><b>DBConnectionType</b> is the System.Type of the class that
+ implements System.Data.IDbConnection that is found
+ in the DBProviderAssembly.
+ For example:
+ "Mono.Data.PostgreSqlClient.PgConnection"</li>
+ <li><b>DBConnectionString</b> is the ConnectionString to set to the
+ IDbConnection object to use in opening a connection to a data source.
+ For Example:
+ "hostaddr=127.0.0.1;user=monotest;password=monotest;dbname=monotest"</li>
+ </ul>
+ <li>The function GetConnectionData() gets the database provider assembly, connection type,
+ and connection string parameters if they exist; otherwise, it uses default values. This is
+ done during the loading of the web page.</li>
+ <li>With the connection parameters, the assembly is loaded, the connection type is verified that
+ it implements IDbConnection and an instance of the class can be created, creates a instance
+ of the class, sets the connection string, and opens the connection.</li>
+ </ul>
+ </li>
+ </ul>
<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
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#.
+ Mike Kestner or Rachel Hestilov would be the best people to ask for help on GTK#.
<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#</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. 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
- exists in a provider's class that implements IDbCommand, and others.
-
- <p><b>ADO.NET Multiplexor Provider</b> needs to be created. 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.
-
- <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
- <configuration>\r
- <configSections>\r
- <section name="mono.data"\r
- type="Mono.Data.MultiplexorSectionHandler,Mono.Data"/>\r
- ....\r
- </configSections>\r
- ...\r
- <sectionGroup name="mono.data">\r
- <multiplexor>\r
- <add provider="PostgreSQL" \r
- type="Mono.Data.PostgreSQLClient,Mono.Data"\r
- validate="false" \r
- parameters="USER=xxx;HOST=127.0.0.1;DBNAME=xxx"/>\r
- </multiplexor>\r
- </sectionGroup>\r
- </configuration>\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><b>Building System.Data</b>
<p>The System.Data.dll gets built with the rest of the class library.
</pre>
</ul>
+** Testing
+
+<ul>
+ <li>Testing connection-oriented classes are done
+ via the provider specific tests
+ found in the mcs source at mcs/class</br>
+ <table border=1>
+ <tr>
+ <td><b>Name</b></td>
+ <td><b>Assembly /</br> Namespace</b></td>
+ <td><b>Test</b></td>
+ </tr>
+
+ <tr>
+ <td>Microsoft</br> SQL</br> Server</br></td>
+ <td>System.Data /</br> System.Data.SqlClient</td>
+ <td>SqlTest.cs at</br> System.Data/Test</td>
+ </tr>
+
+ <tr>
+ <td>PostgreSQL</br> (Mono)</td>
+ <td>Mono.Data.PostgreSqlClient /</br> Mono.Data.PostgreSqlClient</td>
+ <td>PostgresTest.cs at</br> System.Data/Test</td>
+ </tr>
+
+ <tr>
+ <td>MySQL</br> (Mono)</td>
+ <td>Mono.Data.MySql /</br> Mono.Data.MySql</td>
+ <td>MySqlTest.cs at</br> Mono.Data.MySql/Test</td>
+ </tr>
+
+ <tr>
+ <td>Oracle</br> (Mono)</td>
+ <td>System.Data.OracleClient /</br> System.Data.OracleClient</td>
+ <td>TestOracleClient.cs at</br> System.Data.OracleClient</td>
+ </tr>
+
+ <tr>
+ <td>ODBC</br> (Mono)</td>
+ <td>System.Data.OracleClient /</br> System.Data.OracleClient</td>
+ <td>TestOracleClient.cs at</br> System.Data.OracleClient</td>
+ </tr>
+
+ </table>
+
+
+ <li><a href="http://www.go-mono.com/testing.html">Testing non-connection classes</a> are
+ done via mono's modified version of NUnit.
+ <ul>
+ <li>To run all the NUnit tests for Mono, you need the mcs source. cd to the root
+ of the mcs source. To run it:
+ <ul>
+ <li>On Linux: make -f makefile test</li>
+ <li>On Windows: make test</li>
+ </ul>
+ </li>
+ <li>If you just want to run the NUnit tests for System.Data, you would cd into
+ the mcs source at class/System.Data/Test and run it:
+ <ul>
+ <li>On Linux: make -f makefile test</li>
+ <li>On Windows: make test</li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+
+</ul>
+