2007-06-08 Jonathan Pobst <monkey@jpobst.com>
[mono.git] / web / ado-net
index 11162c07f247e1fb9cac5300763eb1728a09ef64..0095d79ef79996374030641fce45c5c8a01272ac 100644 (file)
 * 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>.
-
-* Action plan
-
-       The current plan to implement ADO.NET is as follows:
-
-       <b>Step 1:</b> SqlClient:
-
-       <ul>
-               * Implementation of System.Data.SqlClient based on
-                 the PostgreSQL C API.
-
-               * 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>
-
-       <b>Step 2:</b> OleDB:
-       <ul>
-               * On Unix systems: System.Data.OleDb will use LibGDA as its
-                 engine. 
-
-                 LibGDA is the data access engine that is used by
-                 Gnome-Db (only libgda, not libgnomedb at all).
-
-               * On Windows systems: System.Data.OleDb will use OLE-DB as
-                 its engine.
-       </ul>
-
-       <b>Step 3:</b> System.Data.SqlClient Providers:
-
-       <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.
-       </ul>
-
-       <b>Step 4:</b> Other System.Data providers:
-
-       <ul>
-               * The idea in MS .NET System.Data seems to be to have
-                 a managed provider for each supported DBMS. So, apart
-                 from System.Data.OleDb (generic) and System.Data.SqlClient,
-                 we'll need to have System.Data.ODBC, System.Data.MySQL,
-                 System.Data.Oracle, System.Data.PostgreSQL, etc. Others,
-                 of course, are welcomed.
-       </ul>
+** 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>
        
-* Current Status
+</ul>
 
-       We are able now to run basic commands (INSERT, DELETE) into a
-       PostgreSQL database (see mcs/class/System.Data/Test/TestSqlInsert.cs).
-       To compile that test program, you need:
+** Bugs and Feature Requests
 
-       <b>On Linux</b>
+<ul>
 
-       <ul>
-               * update your mono sources.
-
-               * get the .dll's and mcs.exe built on windows, and put them on your
-                 linux machine.
-
-               * compile the test program along with the System.Data.Common and
-                 System.Data.SqlClient files.
-       </ul>
-
-* Testing
+       <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>
 
-       In order to test System.Data.SqlClient, you will need to have
-       access to a remote PostgreSQL DBMS, or you will have to install 
-       one locally.  PostgreSQL is the DBMS used for the initial 
-       implementation of System.Data.SqlClient.
+</ul>
        
-       Why?  Because it is open source, has a client 
-       library that is easy to use, PostgreSQL is easy to install 
-       using the Cygwin install program, not difficult to setup after
-       installation, and it runs under: Linux, 
-       Windows (via cygwin and ipc-daemon), Unix, and
-       others.  This allowed us to create the
-       System.Data functionality in Mono much quicker.
+** ADO.NET Data Providers
        
-       If you plan on using a remote PostgreSQL DBMS Server,
-       than you will need to have the PostgreSQL client software on your
-       local computer that includes libpq.so (pq.dll on Windows).
-
-       Installation instructions for PostgreSQL DBMS:
-
-       <b>On Linux</b>
-
+<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.
+       
+** Database Access from ASP.NET
        <ul>
-               * TODO
-
-               * It easier to install PostgreSQL on Linux than Windows.  
+               <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>
-               * Use the cygwin installer to install the PostgreSQL DBMS.  It is
-                 found in the database category.
-                 
-               * Read the file postgres-x.x.README at /usr/doc/Cygwin and read 
-                 the requirements to install PostgreSQL.  Those requirements
-                 are included with cygwin except cygipc.  A default installtion
-                 of cygwin does not install everything you will need, so on the 
-                 safe side, just include everything when installing cygwin.
-               
-                 The -x.x in postgres-x.x is the version of your PostgreSQL DBMS.
-               
-               * Once cygwin has installed PostgreSQL on your computer,
-                 read the file FAQ_MSWIN which is available 
-                 in /usr/doc/postgres-x.x\FAQ_MSWIN
-                 
-                 The -x.x in postgres-x.x is the version of your PostgreSQL DBMS.
-                 
-                 Important notes from this file are:
-                 
-                       * Point 2. - Install the latest cygipc package, 
-                         available at
-                         http://www.neuro.gatech.edu/users/cwilson/cygutils/V1.1/cygipc/
-                         
-                         The cygipc package contains the ipc-daemon you will need 
-                         to run before you can
-                         run the PostgreSQL DBMS Server daemon (postmaster) or run
-                         initdb which initializes the PostgreSQL database.
-                         
-                       * Point 3.  The Cygwin bin directory has to be placed in 
-                         the path before the Windows program directories, 
-                         for example, C:\cygwin\bin 
-                         
-                         My own note, in the Windows control panel, I set
-                         the environment variables PATH to my cygwin /usr/local/bin,
-                         /usr/bin, and /bin.  I also set my LD_LIBRARY_PATH to 
-                         /usr/local/lib and /usr/lib.  For example:
-                         
-                         PATH=c:\cygwin\usr\local\bin;c:\cygwin\usr\bin;c:\cygwin\bin;
-                         LD_LIBRARY_PATH=c:\cygwin\usr\local\lib;c:\cygwin\usr\lib;
-                         
-                       * Point 4. Start the ipc-daemon that came with the cygipc package.  There
-                         are two ways to do this: run it from the command line as:
-                               ipc-daemon &
-                               
-                         or you can set it up as a Windows service.  See the 
-                         file cygrunsrv.README at /usr/doc/Cygwin on how to do this
-                         for ipc-daemon and postmaster.  Note the
-                         troubleshooting section at the end of 
-                         the cygrunsrv.README file.
-                         
-                         To install ipc-daemon as a service, 
-                         you just have to run 'ipc-daemon --install-as-service' (--remove-as-service) 
-                         and then run 'net start ipc-daemon'             
-                         
-               * Read the installation.html file 
-                 at /usr/doc/postgresql-x.x/html/installation.html
-               
-                 In this file, you will run the following commands:
-                 
-                       * mkdir /usr/local/pgsql/data\r
-                       * initdb -D /usr/local/pgsql/data\r
-                       * postmaster -D /usr/local/pgsql/data >logfile 2>&1 &\r
-                       * createdb test\r
-                       * psql test             
-                         
-                 When you need to connect to the database, 
-                 you will need ipc-daemon and postmaster running.  Start ipc-daemon
-                 before any of the command above.  
-                 
-                 psql is a command-line PostgreSQL client tool to 
-                 enter and run SQL commands and queries.
-                 
-                 If there is no database user named postgres, create a user named
-                 postgres with the following SQL command in the client tool psql:
-                       plsql test
-                       create user postgres with password 'fun2db';
-                 The only reason I say this is so you can easily use the System.Data tests
-                 without having to change the database, userid, etc.
-                 
-       </ul>
-       
-       In the path mcs/class/System.Data/Test
-       there is a PostgreSQL test program named
-       PostgreTest.cs.  Thanks goes to Gonzalo for creating the original
-       PostgreSQL test.
-       To use it to test System.Data, you
-       modify the file to your PostgreSQL database
-       connection requirements:
-       
-       dbname is the database, ie, test
-       host is the hostname of the PostgreSQL DBMS Server to connect to
-       user is the username, ie, someuser
-       password is the password, ie, mypass1234
+** 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>
        
-       The connection string is in OLE-DB connection string format.  Internally,
-       SqlConnection converts this to the PostgreSQL connection string format.
-       
-           OLE-DB: "host=localhost;dbname=test;user=joe;password=smoe"
-       PostgreSQL: "host=localhost dbname=test user=joe password=smoe"
 
-       Note that OLE-DB includes the semicolons while PostgreSQL's connection
-       string does not.
+       <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>  
 
-    To compile the PostgresTest.cs program, do:
-    mcs PostgresTest.cs -r System.Data
-    
-    To run using mint, do:
-    mint PostgresTest.exe
-    
-    To run using mono, do:
-    mono PostgresTest.exe
-    
-    You should get something like:
-    
-Administrator@DANPC ~/mono/mcs/class/System.Data/Test\r
-$ mcs PostgresTest.cs -r System.Data\r
-\r
-Administrator@DANPC ~/mono/mcs/class/System.Data/Test\r
-$ mint PostgresTest.exe\r
-        Postgres provider specific tests...\r
-\r
-                Drop table:\r
-Error (don't worry about this one)\r
-                Create table with all supported types:\r
-OK\r
-                Insert values for all known types:\r
-OK\r
-                Select values from the database:\r
-                Get Schema.\r
-dt.Columns.Count: 6\r
-* Column Name: int2_value\r
-         MaxLength: 2\r
-         Type: System.Int16\r
-* Column Name: int4_value\r
-         MaxLength: 4\r
-         Type: System.Int32\r
-* Column Name: bigint_value\r
-         MaxLength: 8\r
-         Type: System.Int64\r
-* Column Name: char_value\r
-         MaxLength: -1\r
-         Type: System.String\r
-* Column Name: varchar_value\r
-         MaxLength: -1\r
-         Type: System.String\r
-* Column Name: text_value\r
-         MaxLength: -1\r
-         Type: System.String\r
-Row 0:\r
-    Col 0: int2_value - -22\r
-    Col 1: int4_value - 1048000\r
-    Col 2: bigint_value - 123456789012345\r
-    Col 3: char_value - This is a char\r
-    Col 4: varchar_value - This is a varchar\r
-    Col 5: text_value - This is a text\r
-Rows: 1\r
-Clean up...\r
-                Drop table...\r
-OK\r
-\r