* 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> and <a href="mailto:tim@timcoleman.com">Tim Coleman</a>.
+** Data Access in Mono
+
+<ul>
+ <li>Today, our goal is to be compatible with .NET 1.1 and .NET 1.0. We also would like
+ to extend data access beyond what is included with .NET 1.0 and .NET 1.1,
+ such as, include access to more databases, such as, PostgreSQL and MySQL,
+ but also provide classes that help in creating data source-agnostic code, such as,
+ Mono.Data.ProviderFactory.</li>
+
+ <li>In the future, we would like to be compatible with .NET 1.2. This includes features
+ like <a href="http://longhorn.msdn.microsoft.com/lhsdk/ndp/daconworkingwithobjectspacesarchitecture.aspx">ObjectSpaces</a></li>
+</ul>
-* Action plan
+** Bugs and Feature Requests
- The current plan to implement ADO.NET is as follows:
+<ul>
- <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:
-
- <ul>
- * <p>On Unix systems: System.Data.OleDb uses the
- <a href="http://www.gnome-db.org/">LibGDA</a>
- engine.
-
- <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.
-
- <p>There is work under way to get libgda working under
- Windows using Cygwin by the GNOME-DB developers.
-
- <p>LibGDA has providers for MySQL, PostgreSQL, XML, ODBC (via unixODBC),
- Oracle, Interbase, Sybase and MS SQL Server (via FreeTDS), IBM DB2,
- SQLite and MS Access (via MDB Tools).
-
- * 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:
-
- <ul>
- * <p>System.Data.SqlClient will then 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>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>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:
-
- <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.
- On Windows, we may just use the native ODBC libraries that comes with Windows since
- unixODBC is supposed to be compatible with that.
-
- <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>unixODBC has providers for:
- Oracle, Microsoft SQL Server and Sybase (via FreeTDS),
- MySQL, PostgreSQL, Informix, IBM DB2 Universal Database,
- Interbase, miniSQL (mSQL), AdabasD, Empress, and others.
-
- </ul>
-
- <b>Step 5:</b> Other System.Data 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>We will need to have Mono.Data.MySQL, Mono.Data.PostgreSQL,
- Mono.Data.DB2, and Mono.Data.miniSQL. Others,
- of course, are welcomed.
-
- <p>System.Data has been designed so
- non-database providers can be created too.
- </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>
-* Current Status
+ <li>Any requests for new features or missing functionality
+ can entered as a bug in Bugzilla too</li>
- <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 mono-list@ximian.com
+</ul>
- <p>For Step 1, the PostgreSQL provider can connect, execute commands, retrieve
- data via a Data Reader, read data in a DataTable in a DataSet via a Data Adapter,
- and use input parameters in its SQL.
-
- <p>For Step 2, Rodrigo Moya has been working on System.Data.OleDb 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
- 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).
+** ADO.NET Data Providers
- <p>For Step 3, we need someone to start on the Microsoft SQL Server and Sybase
- support. This can be done by creating a FreeTDS .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 \r
- provider. jTDS is a 100% pure Java (Type 4) open source JDBC 2.0 driver for \r
- the Microsoft SQL Server series (6.5, 7.x and 2000). \r
-
- <p>For Step 4, Brian Ritchie has contributed an initial implementation of
- an ODBC ADO.NET Provider that uses unixODBC. He has a basic implementations of \r
- OdbcConnection, OdbcCommand, OdbcDataReader, OdbcParameter, and \r
- OdbcParameterCollection. It can execute queries and display result sets \r
- (and ExecuteNonQuery too). I'm currently working on the Parameter & \r
- Transaction support. He has been doing his development on Debian against a DB2 \r
- 7.2 UDB.\r
-
- <p>For Step 5, we have just begun creating a Mono.Data .NET Provider - a MySQL
- .NET Provider that uses the MySQL C Client Library. This provider is
- found in Mono.Data.MySql. We can currently connect, execute simple commands, and
- retrieve results using a data reader. The shared client libraries
- between windows version and linux are different: windows has libmySQL.dll
- while linux has libmysqlclient.so. I have put this mapping in mono/config.in so it can
- automatically be maped. There is a problem with mysql thread functions because
- they do not load for some reasons when running under Mono.
- The C# Bindings to MySQL are thanks to Brad Meril.
-
- <p>DataSet, DataAdaptor, DataTable, DataRelation, etc. need to be implemented
- more.
-
- <p>Integration with ASP.NET needs to be 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>Integration with Windows.Forms, such as, data binding
- to a System.Windows.Forms.DataGrid. This may involve implementing many classes
- in System.Windows.Forms and System.Data.
-
- <p>Integration with GTK#, 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.
-
- <p>Integration with QT#. Any information on how this can be done is appreciated.
-
- <p>Integration with GDA# and Libgnomedb# which exists in GTK#. 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
- (GUI controls) that can be used, such as, GnomeDbGrid, GnomeDbBrowswer, GnomeDbSqlEditor,
- GnomeDbList, GnomeDbLogin, GnomeDbReportEditor, GnomeDbTableEditor,
- GnomeDbCombo, and GnomeDbForm.
-
- <P>XML support in System.Data 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.
+<p>Mono has many ADO.NET Data Providers to get you connected:
+
+<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">Older Microsoft SQL Server and Sybase databases</a></li>
+</ul>
+
+<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>sqlsharp.exe
+ <ul>
+ <li>SQL# is a command line query tool included with Mono to enter and execute SQL statements</li>
+ </ul>
+ </li>
+ <li>xsd.exe
+ <ul>
+ <li>XML Schema Definition tool</li>
+ <ul>
+ <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>\r
+ </ul>\r
+ </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.
- <p>The System.Data.dll gets built with the rest of the class library.
- To compile the System.Data.dll assembly separately, you need:
-
- <b>On Unix</b>
-
+** Database Access from ASP.NET
<ul>
- * update your mono sources. Be sure you have latest mcs.exe
- and .dll's, since there have been many fixes needed for
- compilation on Linux.
-
- * compile System.Data.dll:
-<pre>
- cd mcs/class/System.Data<br>
- mcs --target library -o System.Data.dll @list
-</pre>
+ <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:
+ "ByteFX.Data"</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:
+ "ByteFX.Data.MySqlConnection"</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>
- <b>On Windows</b>
-
- <ul>
- * update your mono sources. Be sure you have latest mcs.exe
- and .dll's. You can use the same method as Linux,
- or you can use NAnt.
-
- * To use NAnt:
-
-<pre>
- cd mcs/class/System.Data
- ../../nant/NAnt.exe
-</pre>
+** 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> (Npgsql)</td>
+ <td>Npgsql /</br> Npgsql</td>
+ <td>*.cs at</br> Npgsql/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/Test</td>
+ </tr>
+
+ <tr>
+ <td>ODBC</br> (Mono)</td>
+ <td>System.Data.Odbc /</br> System.Data</td>
+ <td>OdbcTest.cs (to connect to MS SQL Server)at</br> System.Data/Test</td>
+ </tr>
- 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>
+ </table>
+
-<pre>
- cd mcs/class/System.Data
- ../../nant/NAnt.exe clean
-</pre>
- </ul>
+ <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>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>make test</li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+
+</ul>