2005-01-10 Marek Safar <marek.safar@seznam.cz>
[mono.git] / web / ado-net
index 438b47cb2be195bf064f1998538d5e72a06cd26d..0095d79ef79996374030641fce45c5c8a01272ac 100644 (file)
 * ADO.NET
 
-       The coordinator for the ADO.NET implementation is <a
-       href="mailto:rodrigo@ximian.com">Rodrigo Moya</a>.  
+** Data Access in Mono
 
-* Action plan
+<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>
 
-       The current plan to implement ADO.NET is as follows:
+** Bugs and Feature Requests
 
-       <b>Step 1:</b> SqlClient:
+<ul>
 
-       <ul>
-               * Implementation of System.Data.SqlClient based on
-                 the PostgreSQL C API.
+       <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>
+       
+       <li>Any requests for new features or missing functionality
+           can entered as a bug in Bugzilla too</li>
 
-               * Once the System.Data.SqlClient code is functional and
-                 is usable by other people, we willl move it to
-                 System.Data.PostgreSQL, and will convert the existing
-                 System.Data.SqlClient to be just a wrapper around
-                 System.Data.PostgreSQL.  
+</ul>
+       
+** ADO.NET Data Providers
+       
+<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>
 
-       </ul>
+<p>External Projects that have created ADO.NET Providers that work on Mono:
 
-       <b>Step 2:</b> OleDBClient:
-       <ul>
-               * On Unix systems: System.Data.OleDb will use LibGDA as its
-                 engine. 
+<ul>
 
-                 LibGDA is the data access engine that is used by
-                 Gnome-Db (only libgda, not libgnomedb at all).
+       <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>
 
-               * On Windows systems: System.Data.OleDb will use OLE-DB as
-                 its engine.
-       </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>
 
-       <b>Step 3:</b> System.Data.SqlClient Providers:
+** 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.
+       
+** Database Access from ASP.NET
        <ul>
-               * System.Data.SqlClient will then become a generic
-                 proxy for binding to other SQL implementations other
-                 than PostgreSQL (MySQL on Unix/Windows; MS SQL on
-                 Window; Interbase on Unix/Windows). Others are welcomed.
+               <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>
 
+** 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>
+                       
+               </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>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>  
+