+2003-01-19 Daniel Morgan <danmorg@sc.rr.com>
+
+ * doc/ibmdb2: added file which is new web page
+ about IBM DB2 data provider at Mono.Data.DB2Client
+
+ * makefile
+ * commands: added ibmdb2 web page to go-mono web site
+
+ * doc/ado-net: added a couple more developers email, plus made the
+ email spam resistant, added Mono's DB2 data provider to list,
+ added more info about the ProviderFactory and retrieving data using
+ ADO.NET from ASP.NET, add notes about testing, misc cleanup
+
+ * doc/mysql
+ * doc/postgresql
+ * doc/sqlclient
+ * doc/oracle
+ * doc/tdsclient
+ * doc/firebird
+ * doc/oledb
+ * doc/odbc
+ * doc/sybase
+ * doc/sqlite: added testing notes and C# examples
+
+ * doc/gtk-sharp: added links for GTK# for Windows
+
+ * man/sqlsharp.1: added providers Npgsql and MySQLNet
+
2003-01-17 Duncan Mak <duncan@ximian.com>
* runtime/Makefile.am: Add the new Mono.Data.DB2Client.dll.
* 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:
+ <ul>
+ <li>rodrigo -AT- ximian.comNOSPAM - <b>Rodrigo Moya</b> - coordinator
+ for the ADO.NET implementation and works on the OLE DB provider</li>
+ <li>danmorg -AT- sc.rr.comNOSPAM - <b>Daniel Morgan</b> - works on
+ the MySQL, PostgreSQL, and Oracle providers</li>
+ <li>tim -AT- timcoleman.comNOSPAM - <b>Tim Coleman</b> - works on
+ the Microsoft SQL Server, Sybase, and TDS providers</li>
+ <li>brianlritchie -AT- hotmail.comNOSPAM - <b>Brian Ritchie</b> - works on
+ the ODBC provider and the ProviderFactory</li>
+ <li>vladimir -AT- pobox.comNOSPAM - <b>Vladimir Vukicevic</b> - works on
+ the SQL Lite provider</li>
+ <li>cleared -AT- rogers.comNOSPAM - <b>Christopher Bockner</b> - works on
+ the IBM DB2 provider</li>
+ <li>vi64pa -AT- koti.soon.fiNOSPAM - <b>Ville Palo</b> - works on XML stuff in System.Data
+ including DataSet, XmlDataDocument, and has done lots of testing</li>
+ </ul>
-
* Action plan
<p>The current plan to implement ADO.NET is as follows:
<ul>
<li>Either create ADO.NET providers or modify pre-exiting ADO.NET providers to
- work with Mono
+ work with Mono</li>
<ul>
<li>Create ADO.NET Providers
<ul>
- <li><a href="http://www.go-mono.com/mysql.html">MySQL</a>
- <li><a href="http://www.go-mono.com/odbc.html">ODBC</a>
- <li><a href="http://www.go-mono.com/oracle.html">Oracle</a>
- <li><a href="http://www.go-mono.com/oledb.html">OLE DB</a>
- <li><a href="http://www.go-mono.com/postgresql.html">PostgreSQL</a>
- <li><a href="http://www.go-mono.com/sqlclient.html">Microsoft SQL Server</a>
- <li><a href="http://www.go-mono.com/sqlite.html">SQL Lite</a>
- <li><a href="http://www.go-mono.com/sybase.html">Sybase</a>
- <li><a href="http://www.go-mono.com/tdsclient.html">TDS Generic</a>
+ <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>
<li>Providers which we do not have, but we would like to have. Currently,
- some of these databases are supported via the ODBC or OLEDB providers.
+ some of these databases are supported via the ODBC or OLEDB providers.</li>
<ul>
- <li><a href="http://www-3.ibm.com/software/data/db2/">IBM DB2 Universal Database</a>
+ <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>dbase or xbase type database files</li>
<li>Others are welcome</li>
</ul>
- </ul>
+ </ul></li>
<br>
<li>Modify Pre-existing ADO.NET Providers to work with Mono. This may
require fixing or implementing areas of Mono too.
<ul>
<li><a href="http://www.go-mono.com/firebird.html">Firebird Interbase</a></li>
- <li><a href="http://gborg.postgresql.org/project/npgsql/projdisplay.php">Npgsql</a> is a PostgreSQL Managed data provider written
- in 100% C# and does not require a client library </li>
- <li><a href="http://sourceforge.net/projects/mysqlnet/">MySQLNet</a> is a MySQL Manager data provider written in 100% C# and does not
- require a client library</li>
- <li><a href="http://sourceforge.net/projects/mysqldrivercs/">MySQLDriverCS</a> is a MySQL data provider written in C#</li>
-
+ <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 Mono</li>
+ <li><a href="http://sourceforge.net/projects/mysqlnet/">MySQLNet</a> is a
+ MySQL Manager data provider written in 100% C#, does not
+ require a client library, and works on Mono</li>
</ul>
</li>
</ul>
test connection strings, and connect to various ADO.NET
providers in Mono. The SQL# CLI can be found in
mcs/tools/SqlSharp/SqlSharpCli.cs</li>
+
<li><p><b>SQL# GUI - a GUI tool</b> written in C# to
execute SQL commands.
Currently, there is SQL# For GTK# which
can be found at
mcs/tools/SqlSharp/gui/gtk-sharp
It has a SQL editor with
- syntax hi lighting of SQL keywords</li>
+ syntax hi lighting of SQL keywords. This will be
+ moving to its own cvs modeul sqlsharpgtk.</li>
+
<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
<p>Variouls ADO.NET Providers have been created: PostgreSQL, MySQL, Sybase, SQL Lite,
Microsoft SQL Server, OLE DB, ODBC, and TDS Generic. See their respective web page for
more information.
+
+ <p>Constraints need lots of work
+
+ <p>TypeDataSetGenerator needs to be stubbed and implemented.
<p><b>DataSet, DataAdaptor, DataTable, DataRelation, DataRow, DataColumn,
DataColumnCollection, DataRowCollection, and others</b> need more work. There are
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.
+ XML support in the ExecuteXmlReader() in a SqlCommand. Ville Palo has been
+ heavily modifying DataSet, XmlDataDocument, and other classes for reading
+ and writing XML.
<p><b>ADO.NET Provider Factory</b> has been started by Brian Ritchie. The
- Provider Factory is used to dynamically create
- connections, commands, parameters, and data adapters based on configuration information. This
- provider factory can also provide utility functions needed by a lot of
- providers but are not exposed via the provider.
+ Provider Factory is way to dynamically create
+ connections, commands, parameters, and data adapters based on configuration information. The
+ provider factory also provides utility functions needed by a lot of
+ providers but are not exposed via the provider. The ProviderFactory
+ is found at mcs/class/Mono.Data and includes a test named test.cs for it in
+ mcs/class/Mono.Data/Test. Also, take a look at the sample .config file for the
+ test.exe application named test.exe.config. The .config file is automatically
+ read when you use the Mono.Data.ProviderFactory or Mono.Data.DataTools.
<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>
+ in System.Web and System.Data. If you want to help,
+ contact Gonzalo Paniagua Javier. Here is information about using ADO.NET in ASP.NET:
+ <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
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>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
+
+ <li><a href="http://www.go-mono.com/testing.html">Testing non-connection classes</a> are
+ done via mono's modified version of NUnit.</li>
+
+</ul>
by Borland under the Interbase Public License</li>
<li>Both the Firebird Relational Database and the Firebird .NET Data Provider can be
- downloaded from <a href="http://sourceforge.net/projects/firebird/firebird">here</a></li>
+ downloaded from <a href="http://sourceforge.net/projects/firebird/">here</a></li>
<li>The Firebird .NET Data provider has been made
available by Carlos Guzmán Álvarez (aka "Carlos G.A."), who has also made a
</ul>
-* Current Status
+** Current Status
<ul>
<li>Currently, it is able to connect to Firebird and Interbase databases
</ul>
-* Action Plan
+** Action Plan
<ul>
<li>Bug fixing</li>\r
</li>
</ul>
+
+** Testing
+
+<ul>
+ <li>Need a working mono and mcs</li>
+ <li>Need access to a Firebird Relational Database or you can download
+ it from <a href="http://firebird.sourceforge.net">here</a></li>
+ <li>Get the Firebird .NET data provider from here as
+ <a href="http://lists.sourceforge.net/lists/listinfo/firebird-net-provider">firebird-net-provider</a>. Make
+ sure the Firebird .NET data provider binary assembly FirebirdSql.Data.Firebird.dll is
+ installed in the same place as the mono class libraries.</li>
+ <li>C# Example for Mono's System.Data.OleDb:
+<pre>
+ using System;
+ using System.Data;
+ using FirebirdSql.Data.Firebird;
+
+ public class Test
+ {
+ public static void Main(string[] args)
+ {
+ string connectionString = \r
+ "Database=C:\\PROGRAM FILES\\FIREBIRD\\EXAMPLES\\EMPLOYEE.GDB;" +\r
+ "User=SYSDBA;" +\r
+ "Password=masterkey;" +\r
+ "Dialect=3;" +\r
+ "Server=localhost";\r
+ IDbConnection dbcon = new FbConnection(connectionString);
+ IDbCommand dbcmd = dbcon.CreateCommand();
+ string sql = "SELECT * FROM employee";
+ dbcmd.ConnectionString = sql;
+ IDataReader reader = dbcmd.ExecuteReader();
+ while(reader.Read()) {
+ object dataValue = myReader.GetValue(0);
+ string sValue = dataValue.ToString();
+ Console.WriteLine("Value: " + sValue);
+ }
+ // clean up
+ reader.Close();
+ reader = null;
+ dbcmd.Dispose();
+ dbcmd = null;
+ dbcon.Close();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs -r System.Data.dll \
+ -r FirebirdSql.Data.Firebird.dll
+</pre>
+ </li>
+ <li>Build on Windows via Cygwin:
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ TestExample.cs \
+ -lib:C:/cygwin/home/MyHome/mono/install/lib \
+ -r System.Data.dll -r FirebirdSql.Data.Firebird.dll
+</pre>
+ </li>
+ </ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
+</pre>
+</li>
+
+</ul>
+
<a href="http://gtk-sharp.sourceforge.net">Gtk#</a> (Gtk
sharp) is a set of C# language bindings for the
<a href="http://www.gtk.org">Gtk+</a> toolkit and other
- libraries that are part of the <a
- href="http://www.gnome.org">GNOME</a> platform .
+ libraries that are part of the
+ <a href="http://www.gnome.org">GNOME</a> platform .
** API of Gtk#
The API is browsable
- <a
- href="http://primates.ximian.com/~tvgm/gtk-sharp-docs/">here</a>
+ <a href="http://primates.ximian.com/~tvgm/gtk-sharp-docs/">here</a>
** Where to learn more.
- Visit the official site for the <a
- href="http://gtk-sharp.sourceforge.net">Gtk# Project</a>.
+ Visit the official site for the <a href="http://gtk-sharp.sourceforge.net">Gtk# Project</a>.
The <a href="http://www.go-mono.org/faq">Mono FAQ</a> has some useful
information too.
+
+** GTK# On Linux
+<p>Where to get distributions of GTK# for Linux: TODO
+
+<p>Buidling on Linux:
+
+<ul>
+ <li>Get GTK# source from <a href="http://gtk-sharp.sourceforge.net">Gtk# Project</a>.</li>
+ <li>run ./autogen.sh --prefix=my_mono_installation_prefix</li>
+ <li>make</li>
+ <li>make install</li>
+</ul>
+
+** GTK# On Windows
+
+<p>There is a Windows Installer for GTK# <a href="http://www.sport-huettn.de/mono/gtk-sharp-0.6-stable-2.exe">here</a>.\r
+
+<p>If you want to build GTK# yourself on Windows:\r
+\r
+<p>To build gtk# under windows, you will need the following:\r
+\r
+<ul>\r
+ <li>cygwin from <a href="http://www.cygwin.com/">here</a> When installing Cygwin via setup.exe, \r
+ by default binutils and other tools do not get installed; you have to make \r
+ sure to select these items. Just make\r
+ sure Base and Development are set to Install.</li>\r
+ <li>Mono 0.17 or later from <a href="http://www.go-mono.com/download.html">here</a>\r
+ You can use Windows Setup Wizard (NT/2000/XP).</li>\r
+ <li>GTK+ 2.0 (and dependencies). You can obtain gtk+ 2.0 by either of the\r
+following:\r
+ <ul>\r
+ <li>You can get a Windows Installer at:\r
+ <a href="http://www.dropline.net/jade/download.html">here</a> </li>\r
+ <li>or get the separate binary and dev/lib packages at\r
+ at <a href="http://www.gimp.org/~tml/gimp/win32/downloads.html">here</a> </li>\r
+ <li>or binary package from Dev-C++ site <a href="http://www.bloodshed.net/dev/packages/gtk.html">here</a> </li>\r
+ <li>or get Gtk4Win <a href="http://wingtk.sourceforge.net/index.html">here</a> </li>\r
+ <li>or the source at <a href="http://www.gtk.org/">here</a> </li>\r
+ </ul>\r
+ </li>\r
+ <li>binary distriubtion of a current web browser\r
+ like Internet Explorer 4.0, Mozilla 1.0, or Netscape 7.0 which\r
+ includes things like msvcrt.dll.</li>\r
+ <li>Microsoft .NET Framework at\r
+ <a href="http://msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?url=/msdn-files/027/000/976/msdncompositedoc.xml&frame=true">here</a> </li>\r
+\r
+<p>If you are running Windows 95/98/ME, then you will need Unicode support.\r
+Look in\r
+mono-list archives for information about how to get\r
+Mono to work on Windows 9x.\r
+<a href="http://lists.ximian.com/archives/public/mono-list/2002-December/004158.html">here</a>\r
+\r
+<p>Environment Variables to set:\r
+<ul>\r
+<li>PATH - set to your mono installation bin and lib path.\r
+ For example, my mono installation prefix is:\r
+<pre>\r
+F:/cygwin/home/DanielMorgan/mono/install\r
+</pre>\r
+ <p>So, I would set my PATH in the Windows Control Panel as:\r
+<pre>\r
+F:/cygwin/home/DanielMorgan/mono/install/bin;F:/cygwin/home/DanielMorgan/mono/install/lib</li>\r
+</pre>\r
+</li>\r
+<li>LD_LIBRARY_PATH - set to your mono installation lib path</li>\r
+<li>PKG_CONFIG_PATH - set to your mono installation lib/pkgconfig path, such\r
+ as,\r
+<pre>\r
+ F:/cygwin/home/DanielMorgan/mono/install/lib/pkgconfig</li>\r
+</pre>\r
+\r
+ <p>If you got the gtk-sharp source, cd to the gtk-sharp directory, type:\r
+<pre>\r
+ ./autogen.sh --prefix=~/mono/install\r
+</pre>\r
+\r
+ <p>Set your --prefix= to whatever your mono installation prefix is located.\r
+ This will take awhile to go through the ./autogen.sh and ./configure...\r
+\r
+ <p>After that it finishes succesfully, you run make with the makefile.win32\r
+ like:\r
+<pre>\r
+ make -f makefile.win32\r
+</pre>\r
+\r
+ <p>After that finishes succesfully, you can copy to your mono installation lib\r
+ path like:\r
+<pre>\r
+ cp */*.dll ~/mono/install/lib\r
+</pre>\r
+</ul>\r
+\r
+<p>The pkg-config files for\r
+gtk+ 2.0 and dependencies will need to be set correctly if they haven't\r
+already been.\r
+\r
+<p>Look in your mono installation/lib/pkgconfig, such as,\r
+<pre>\r
+F:/cygwin/home/DanielMorgan/mono/install/lib/pkgconfig\r
+</pre>\r
+\r
+<p>You will find files like: gtk+-2.0.pc\r
+\r
+<p>Edit the line that says\r
+\r
+<pre>\r
+ prefix=something\r
+</pre>\r
+\r
+<p>And set it to your mono installation prefix, such as,\r
+\r
+<pre>\r
+ prefix=F:/cygwin/home/DanielMorgan/mono/install\r
+</pre>\r
+\r
+<p>Do this for all the .pc files in that directory. If there are not any, then\r
+you will need to create them. Or get them from somewhere like the dev\r
+packages at\r
+<a href="http://www.gimp.org/~tml/gimp/win32/downloads.html">here</a>\r
+\r
+\r
+** GTK# On Solaris\r
+\r
+ TODO\r
+\r
+** GTK# On AIX\r
+\r
+ TODO\r
--- /dev/null
+* IBM DB2 Data Provider
+<ul>
+ <li>Exists in namespace DB2ClientCS and assembly Mono.Data.DB2Client</li>
+
+ <li>The source code exists at mcs/class/Mono.Data.DB2Client</li>
+
+ <li>Requires the Call Level Interface to IBM DB2 shared library. This
+ is db2cli.dll on Windows. The IBM DB2 CLI API is very similar to the ODBC API. If
+ you take a look at Mono's System.Data.Odbc ODBC provider, you will see the
+ DllImport's have similiar function names.</li>
+
+ <li><a href="http://www-3.ibm.com/software/data/db2/">IBM DB2 Universal Database</a> can be downloaded from IBM.</li>
+
+ <li>IBM DB2 Provider created by Christopher Bockner.</li>
+</ul>
+
+** Current Status
+
+<ul>
+ <li>Compiles on Windows and Linux. Works on Windows. Still needs to be tested on Linux.</li>
+
+ <li>Able to connect to IBM DB2</li>
+
+ <li>Able to execute DML, such as, CREATE TABLE via ExecuteNonQuery()</li>
+
+</ul>
+
+** Action Plan
+
+<ul>
+ <li>Still needs work to get it to retrieve data via ExecuteReader() and
+ use the data reader to read data.</li>
+
+</ul>
+
+** Testing
+
+In order to test.
+<ul>
+ <li>Have working mono and mcs setup</li>
+
+ <li>Have access to an IBM DB2 database. If you do not have access, download the
+ <a href="http://www-3.ibm.com/software/data/db2/">IBM DB2</a> software. There
+ are versions for Windows, Linux, AIX, and Sun Solaris.</li>
+
+ <li>Make sure the assembly Mono.Data.DB2Client.dll was built and installed
+ where the other class libraries are installed.</li>
+
+ <li>If you do not have the source to mcs, get the source from
+ <a href="http://www.go-mono.com/download">here</a></li>
+
+ <li>In mcs/class/Mono.Data.DB2Client/Test/DBConnTest, you will find
+ a DBConnTest.cs.</li>
+
+ <li>To build DBConnTest:
+ <ul>
+ <li>On Unix:</li>
+<pre>
+mcs DBConnTest.cs -r System.Data.dll -r Mono.Data.DB2Client.dll
+</pre>
+ </li>
+ <li>On Windows via Cygwin:
+<pre>
+mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe DBConnTest.cs \
+ -lib:C:/cygwin/home/MyHome/mono/install/lib \
+ -r System.Data.dll -r Mono.Data.DB2Client.dll
+</pre>
+ </li>
+ <li>To run it on mono:
+<pre>
+mono DBConnTest.exe database userid password
+</pre>
+ </li>
+ </ul>
+ </li>
+
+ <li>C# Example:
+<pre>
+ using System;
+ using System.Data;
+ using Mono.Data.DB2Client;
+
+ public class Test
+ {
+ public static void Main(string[] args)
+ {
+ string connectionString =
+ "DSN=sample;UID=db2admin;PWD=mypass";
+ IDbConnection dbcon = new DB2ClientConnection(connectionString);
+ IDbCommand dbcmd = dbcon.CreateCommand();
+ string sql =
+ "CREATE TABLE mono_db2_test1 ( " +\r
+ " testid varchar(2), " +\r
+ " testdesc varchar(16) " +\r
+ ")";
+ dbcmd.ConnectionString = sql;
+ dbcmd.ExecuteNonQuery();
+ dbcmd.Dispose();
+ dbcmd = null;
+ dbcon.Close();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs -r System.Data.dll \
+ -r Mono.Data.DB2Client.dll
+</pre>
+ </li>
+ <li>Build on Windows via Cygwin:
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ TestExample.cs \
+ -lib:C:/cygwin/home/MyHome/mono/install/lib \
+ -r System.Data.dll -r Mono.Data.DB2Client.dll
+</pre>
+ </li>
+ </ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
+</pre>
+ </li>
+
+</ul>
+
<ul>
<li>MySQL Data Provider for
<a href="http://www.mysql.com/">MySQL</a> databases. It is written in C# and uses
- the MySQL C Client Library
+ the MySQL C Client Library</li>
- <li>Exists in namespace Mono.Data.MySql and assembly Mono.Data.MySql
+ <li>Exists in namespace Mono.Data.MySql and assembly Mono.Data.MySql</li>
<li>Works on Windows and Linux via the MySQL client shared library
- (libmySQL.dll on Windows and libmysqlclient.so on Linux).
+ (libmySQL.dll on Windows and libmysqlclient.so on Linux).</li>
- <li>Started by Daniel Morgan using C# Bindings to MySQL from Brad Meril.
+ <li>Started by Daniel Morgan using
+ <a href="http://www.cybercom.net/~zbrad/DotNet/MySql/">C# Bindings to MySQL</a> from <a href="mailto:zbrad@cybercom.net">Brad Merill</a>
<li><a href="http://www.mysql.com/articles/dotnet/">Exploring MySQL in the Microsoft .NET Environment</a> is an article
- by Mr. Venu who is a MySQL AB developer.
+ by Mr. Venu who is a MySQL AB developer.</li>
- <li>Other projects which have created a .NET Data provider for MySQL in C#
+ <li>There is a good alternative to the provider in Mono:
<ul>
- <li><a href="http://sourceforge.net/projects/mysqldrivercs/">MySQLDriverCS</a> is a MySQL provider written in C#
- <li><a href="http://sourceforge.net/projects/mysqlnet/">MySQLNet</a> is a MySQL Manager provider written in C#
+ <li><a href="http://sourceforge.net/projects/mysqlnet/">MySQLNet</a> from ByteFX
+ is a MySQL Managed provider written in 100% C#,
+ does not require a client library, and works on Microsoft .NET and Mono. You
+ need at least Mono 0.18 and MySQLNet 0.65 for it to work on Mono.</li>
</ul>
+ </li>
+ <li>Testing for Mono's Mono.Data.MySql and ByteFX's ByteFX.Data.MySQLClient is below...</li>
</ul>
-* Current Status
+** Current Status
<ul>
<li>can connect
can be modified with a text editor.
</ul>
-* Action plan
+** Action plan
The current plan to work on the MySQL data provider:
<li>Get the provider to work like other data providers
</ul>
+
+** Testing for Mono's MySQL provider (Mono.Data.MySql)
+
+<ul>
+ <li>Have access to a MySQL database or download it from
+ <ul>
+ <li><a href="http://www.mysql.com/downloads/index.html">MySQL AB</a></li>
+ </ul>
+ </li>
+
+ <li>Take a look at MySqlTest.cs in mcs/class/Mono.Data.MySql/Test</li>
+
+ <li>Has a ConnectionString format:
+<pre>
+ "Server=hostname;" +
+ "Database=database;" +
+ "User ID=username;" +
+ "Password=password"
+ (or)
+ "host=hostname;" +
+ "dbname=database;" +
+ "user=username;" +
+ "passwd=password"
+</pre>
+
+ <li>C# Example:
+<pre>
+ using System;
+ using System.Data;
+ using Mono.Data.MySql;
+
+ public class Test
+ {
+ public static void Main(string[] args)
+ {
+ string connectionString =
+ "Server=localhost;" +
+ "Database=test;" +
+ "User ID=mysql;" +
+ "Password=;";
+ IDbConnection dbcon;
+ dbcon = new MySqlConnection(connectionString);
+ IDbCommand dbcmd = dbcon.CreateCommand();
+ // requires a table to be created named employee
+ // with columns firstname and lastname
+ // such as,
+ // CREATE TABLE employee (
+ // firstname varchar(32),
+ // lastname varchar(32));
+ string sql =
+ "SELECT firstname, lastname " +
+ "FROM employee";
+ dbcmd.ConnectionString = sql;
+ IDataReader reader = dbcmd.ExecuteReader();
+ while(reader.Read()) {
+ string FirstName = reader["firstname"];
+ string LastName = reader["lastname"];
+ Console.WriteLine("Name: " +
+ FirstName + " " + LastName);
+ }
+ // clean up
+ reader.Close();
+ reader = null;
+ dbcmd.Dispose();
+ dbcmd = null;
+ dbcon.Close();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs \
+ -r System.Data.dll \
+ -r Mono.Data.MySql.dll
+</pre>
+ </li>
+ <li>Build on Windows via Cygwin:
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ TestExample.cs \
+ -lib:C:/cygwin/home/MyHome/mono/install/lib \
+ -r System.Data.dll \
+ -r Mono.Data.MySql.dll
+</pre>
+ </li>
+ </ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
+</pre>
+ </li>
+
+</ul>
+
+** Testing for MySQLNet provider (ByteFX.Data.MySQLClient)
+
+<ul>
+ <li>Have access to a MySQL database or download it from
+ <ul>
+ <li><a href="http://www.mysql.com/downloads/index.html">MySQL AB</a></li>
+ </ul>
+ </li>
+
+ <li>MySQLNet can be gotten from <a href="http://sourceforge.net/projects/mysqlnet/">here</a> and the
+ binary assembly ByteFX.Data.dll needs to be installed
+ in the same place as the mono class libraries.</li>
+
+ <li>MySQLNet requires <a href="http://www.icsharpcode.net/OpenSource/SharpZipLib/default.asp">SharpZipLib</a> which is
+ a Zip Library written in 100% C#. This is used for compression/decompression of data
+ sent/received over the network. The SharpZipLib binary assembly SharpZipLib.dll should
+ be installed in the same place as the mono class libraries.</li>
+
+ <li>Has a ConnectionString format:
+<pre>
+"Server=hostname;" +
+"Database=database;" +
+"User ID=username;" +
+"Password=password"
+</pre>
+ </li>
+ <li>C# Example:
+<pre>
+ using System;
+ using System.Data;
+ using ByteFX.Data.MySQLClient;
+
+ public class Test
+ {
+ public static void Main(string[] args)
+ {
+ string connectionString =
+ "Server=localhost;" +
+ "Database=test;" +
+ "User ID=mysql;" +
+ "Password=;";
+ IDbConnection dbcon;
+ dbcon = new MySQLConnection(connectionString);
+ IDbCommand dbcmd = dbcon.CreateCommand();
+ // requires a table to be created named employee
+ // with columns firstname and lastname
+ // such as,
+ // CREATE TABLE employee (
+ // firstname varchar(32),
+ // lastname varchar(32));
+ string sql =
+ "SELECT firstname, lastname " +
+ "FROM employee";
+ dbcmd.ConnectionString = sql;
+ IDataReader reader = dbcmd.ExecuteReader();
+ while(reader.Read()) {
+ string FirstName = reader["firstname"];
+ string LastName = reader["lastname"];
+ Console.WriteLine("Name: " +
+ FirstName + " " + LastName);
+ }
+ // clean up
+ reader.Close();
+ reader = null;
+ dbcmd.Dispose();
+ dbcmd = null;
+ dbcon.Close();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs -r System.Data.dll \
+ -r ByteFX.Data.dll
+</pre>
+ </li>
+ <li>Build on Windows via Cygwin:
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ TestExample.cs \
+ -lib:C:/cygwin/home/MyHome/mono/install/lib \
+ -r System.Data.dll -r ByteFX.Data.dll
+</pre>
+ </li>
+ </ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
+</pre>
+ </li>
+
+</ul>
+
<ul>
<li>Exists in namespace System.Data.Odbc and assembly System.Data
- <li>Works on Windows and Linux
+ <li>Works on Windows and Linux. Should have no problems working on UNIX too.
<li>Works on Windows via the native Windows odbc32.dll
- <li>Works on Linux via <a href="http://www.unixodbc.org/">unixODBC</a>
+ <li>Works on Linux via:
- <li>List of unixODBC <a href="http://www.unixodbc.org/drivers.html">drivers</a> and
- an alternative list
+ <ul>
+ <li><a href="http://www.unixodbc.org/">unixODBC</a> which has
+ commercial support
+ from <a href="http://www.easysoft.com/">Easysoft</a></li>
+
+ <li><a href="http://www.iodbc.org/">iODBC</a> which has
+ a commercial support
+ from <a href="http://oplweb.openlinksw.com:8080/download/">OpenLink Software</a></li>
+ </ul>
- <li>An alternative to unixODBC, but not tested with this
- provider is <a href="http://www.iodbc.org">iODBC</a>
-
- <li>Another alternative to unixODBC, but not tested this provider is
- <a href="http://oplweb.openlinksw.com:8080/download/">OpenLink's</a>.
+ <li>List of unixODBC <a href="http://www.unixodbc.org/drivers.html">drivers</a>
<li>List of <a href="http://ourworld.compuserve.com/homepages/Ken_North/odbcvend.htm">ODBC Vendors</a>
+
+ <li>ODBC can connect to various databases which has an ODBC driver installed:
+ <ul>
+ <li><a href="http://www.mysql.com/">MySQL</a>
+ <li><a href="http://www.postgresql.org/">PostgreSQL</a>
+ <li><a href="http://www.oracle.com/">Oracle</a>
+ <li><a href="http://www.borland.com/products/downloads/download_interbase.html">Interbase</a>
+ <li><a href="http://www.sybase.com/downloads">Sybase</a> and
+ <li><a href="http://www.microsoft.com/sql/default.asp">Microsoft SQL Server</a> (
+ via <a href="http://www.freetds.org/">FreeTDS</a> on UNIX)
+ <li><a href="http://www-3.ibm.com/software/data/db2/">IBM DB2 Universal Database</a>
+ <li><a href="http://www.microsoft.com/office/access/default.asp">MS Access</a>
+ (via <a href="http://mdbtools.sourceforge.net/">MDB Tools</a> on UNIX)
+ </ul>
- <li>ODBC Provider created by Brian Ritchie.
+ <li>ODBC Provider created by Brian Ritchie.</li>
+
+ <li>Does not support trusted connections</li>
</ul>
-* Current Status
+** Current Status
<ul>
- <li>Connect on Windows via native Windows odbc32.dll
-
- <li>Connect on Linux via unixODBC's libodbc.so
+ <li>Can Connect on:
+ <ul>
+ <li>Windows via native Windows odbc32.dll</a></li>
+ <li>Linux via:
+ <ul>
+ <li>unixODBC's libodbc.so</li>
+ <li>iODBC's libiodbc.so</li>
+ </ul>
+ </li>
+ </ul>
+ </li>
<li>Various databases have been tested using their
- ODBC drivers: MySQL, Oracle, IBM DB2, and Microsoft SQL Server
+ ODBC drivers: MySQL, PostgreSQL, Oracle, IBM DB2, and Microsoft SQL Server</li>
- <li>Can execute non-query commands via ExecuteNonQuery of a OdbcCommand
+ <li>Can execute non-query commands via ExecuteNonQuery of a OdbcCommand</li>
<li>Can execute aggreates and retrieve a single row single column result via
- ExecuteScalar of a OdbcCommand
+ ExecuteScalar of a OdbcCommand</li>
<li>Can execute queries via ExecuteReader of a OdbcCommand and
- retrieve results using an OdbcDataReader.
+ retrieve results using an OdbcDataReader</li>
+
+ <li>Can get a DataTable containing schema info via GetSchemaTable() in a OdbcDataReader</li>
- <li>Can get a DataTable containing schema info via GetSchemaTable() in a OdbcDataReader
+ <li>Can Fill a DataTable in a DataSet via an OdbcDataAdapter</li>
</ul>
-* Action Plan
+** Action Plan
<ul>
- <li>Create a Data Adapter to Fill data into a DataTable in a DataSet
- <li>TODO
+ <li>Fixing bugs
+
+ <li>Testing with other setups
+</ul>
+
+** Testing ODBC provider
+
+<p>Test Mono's ODBC provider System.Data.Odbc with the MySQL ODBC driver MyODBC
+
+<p><ul>
+ <li>Take a look at OdbcTest.cs in mcs/class/System.Data/Test</li>
+
+ <li>Here is a ConnectionString format if you have a DSN setup:
+<pre>
+"DSN=dataSetName;UID=username;PWD=password"
+</pre>
+ </li>
+ <li>Here is a ConnectionString format if you do not have DSN (have not
+ gotten this to work):
+<pre>
+"DRIVER={SQL Server};SERVER=(local);UID=sa;PWD=;DATABASE=pubs"
+</pre>
+ </li>
+ <li>C# Example:
+<pre>
+ using System;
+ using System.Data;
+ using System.Data.Odbc;
+
+ public class Test
+ {
+ public static void Main(string[] args)
+ {
+ // have an ODBC DSN setup named MYSQLDSN
+ // that accesses a MySQL database via
+ // MyODBC driver for ODBC with a
+ // hostname of localhost and database test
+ string connectionString =
+ "DSN=MYSQLDSN;" +
+ "UID=mysql;" +
+ "PWD=;";
+ IDbConnection dbcon;
+ dbcon = new OdbcConnection(connectionString);
+ IDbCommand dbcmd = dbcon.CreateCommand();
+ // requires a table to be created named employee
+ // with columns firstname and lastname
+ // such as,
+ // CREATE TABLE employee (
+ // firstname varchar(32),
+ // lastname varchar(32));
+ string sql =
+ "SELECT firstname, lastname " +
+ "FROM employee";
+ dbcmd.ConnectionString = sql;
+ IDataReader reader = dbcmd.ExecuteReader();
+ while(reader.Read()) {
+ string FirstName = reader["firstname"];
+ string LastName = reader["lastname"];
+ Console.WriteLine("Name: " +
+ FirstName + " " + LastName);
+ }
+ // clean up
+ reader.Close();
+ reader = null;
+ dbcmd.Dispose();
+ dbcmd = null;
+ dbcon.Close();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs -r System.Data.dll
+</pre>
+ </li>
+ <li>Build on Windows via Cygwin:
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ TestExample.cs \
+ -lib:C:/cygwin/home/MyHome/mono/install/lib \
+ -r System.Data.dll
+</pre>
+ </li>
+ </ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
+</pre>
+ </li>
+
</ul>
* OLE DB Provider
+
<ul>
<li> Provides a OleDb-like provider for Mono
- using <a href="http://www.gnome-db.org/">GDA</a> as the data access layer.
+ using <a href="http://www.gnome-db.org/">GDA</a> as the data access layer.</li>
- <li> Exists in namespace System.Data.OleDb and assembly System.Data
+ <li> Exists in namespace System.Data.OleDb and assembly System.Data</li>
- <li>Created by Rodrigo Moya
+ <li>Created by Rodrigo Moya</li>
- <li>LibGDA has providers for:
+ <li>LibGDA has providers for:</li>
<ul>
- <li><a href="http://www.mysql.com/">MySQL</a>
- <li><a href="http://www.postgresql.org/">PostgreSQL</a>
- <li>XML
- <li>ODBC (via <a href="http://www.unixodbc.org/">unixODBC</a>)
- <li><a href="http://www.oracle.com/">Oracle</a>
- <li><a href="http://www.borland.com/products/downloads/download_interbase.html">Interbase</a>
+ <li><a href="http://www.mysql.com/">MySQL</a></li>
+ <li><a href="http://www.postgresql.org/">PostgreSQL</a></li>
+ <li>XML</li>
+ <li>ODBC (via <a href="http://www.unixodbc.org/">unixODBC</a>)</li>
+ <li><a href="http://www.oracle.com/">Oracle</a></li>
+ <li><a href="http://www.borland.com/products/downloads/download_interbase.html">Interbase</a></li>
<li><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>)
- <li><a href="http://www-3.ibm.com/software/data/db2/">IBM DB2 Universal Database</a>
- <li><a href="http://www.hwaci.com/sw/sqlite/download.html">SQL Lite</a>
- <li><a href="http://www.microsoft.com/office/access/default.asp">MS Access</a>
- (via <a href="http://mdbtools.sourceforge.net/">MDB Tools</a>)
+ via <a href="http://www.freetds.org/">FreeTDS</a>)</li>
+ <li><a href="http://www-3.ibm.com/software/data/db2/">IBM DB2 Universal Database</a></li>
+ <li><a href="http://www.hwaci.com/sw/sqlite/download.html">SQL Lite</a></li>
+ <li><a href="http://www.microsoft.com/office/access/default.asp">MS Access</a></li>
+ (via <a href="http://mdbtools.sourceforge.net/">MDB Tools</a>)</li>
</ul>
+ </li>
+
+ <li>Does not support trusted connections</li>
</ul>
-* Current Status
+** Current Status
<ul>
<li>The OleDb provider 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.
+ PostgreSQL database via libgda via the C-Sharp bindings to libgda.</li>
<li>Basic
functionality (execution of commands, data retrieval, transactions, etc) are
- now working.
+ now working.</li>
<li>An inital implementation of GetSchemaTable() for
the OleDbDataReader has been checked into cvs. GetSchemaTable() isn't correct for OleDb,
- but the foundation is there.
+ but the foundation is there.</li>
</ul>
-* Action Plan
+** Action Plan
<ul>
<li>Current focus is on filling up the missing pieces (Data adapters
- mainly) and schema support.
+ mainly) and schema support.</li>
<li>We need help building libgda on Windows though. libgda
- builds find on linux though.
+ builds find on linux though.</li>
+
+ <li>Need to make the OleDb provider compatible with the OleDb provider in Microsoft .NET</li>
+ </ul>
+
+** Testing OleDb with libgda's PostgreSQL provider
- <li>Need to make the OleDb provider compatible with the OleDb provider in Microsoft .NET
+<ul>
+ <li>Requires a working mono and mcs</li>
+ <li>Requires Linux because the OleDb provider uses libgda and libgda only
+ works on Linux.</li>
+ <li>Connection String format: "Provider=providerName;...". providerName is the
+ name of the Provider you use, such as, PostgreSQL, MySQL, etc. The elipsis ...
+ means that the connection parameters are dependent upon the provider being used and
+ are passed to libgda for connecting. Such paramters, can be: Database, User ID, Password,
+ Server, etc...</li>
+ <li>See the test TestOleDb.cs found at mcs/class/System.Data/System.Data.OleDb</li>
+ <li>C# Example for Mono's System.Data.OleDb:
+<pre>
+ using System;
+ using System.Data;
+ using System.Data.OleDb;
+
+ public class Test
+ {
+ public static void Main(string[] args)
+ {
+ // there is a libgda PostgreSQL provider
+ string connectionString =
+ "Provider=PostgreSQL;" +
+ "Addr=127.0.0.1;" +
+ "Database=rodrigo";
+ IDbConnection dbcon;
+ dbcon = new OleDbConnection(connectionString);
+ IDbCommand dbcmd = dbcon.CreateCommand();
+ // requires a table to be created named employee
+ // with columns firstname and lastname
+ // such as,
+ // CREATE TABLE employee (
+ // firstname varchar(32),
+ // lastname varchar(32));
+ string sql =
+ "SELECT firstname, lastname " +
+ "FROM employee";
+ dbcmd.ConnectionString = sql;
+ IDataReader reader = dbcmd.ExecuteReader();
+ while(reader.Read()) {
+ string FirstName = reader["firstname"];
+ string LastName = reader["lastname"];
+ Console.WriteLine("Name: " +
+ FirstName + " " + LastName);
+ }
+ // clean up
+ reader.Close();
+ reader = null;
+ dbcmd.Dispose();
+ dbcmd = null;
+ dbcon.Close();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs -r System.Data.dll
+</pre>
+ </li>
+ <li>Build on Windows via Cygwin:
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ TestExample.cs \
+ -lib:C:/cygwin/home/MyHome/mono/install/lib \
+ -r System.Data.dll
+</pre>
+ </li>
</ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
+</pre>
+</li>
+
+</ul>
+
* Oracle Data Provider
+
<ul>
<li>Exists in namespace System.Data.OracleClient and assembly System.Data.OracleClient</li>
<li>Works with Oracle 8i</li>
<li>More information about Oracle can be found at <a href="http://www.oracle.com/"/>here</a></li>
+
+ <li>Created by Daniel Morgan.</li>
+
+ <li>Does not support trusted connections</li>
</ul>
-* Current Status
+** Current Status
<ul>
<li>OracleConnection can connect to an Oracle 8i database on
</ul>
-* Action Plan
+** Action Plan
<ul>
<li>Get the makefile for the Borland C++ compiler to work
Marshalling in C# to the oci shared library (oci.dll on Windows)</li>
</ul>
+
+** Testing Mono.Data.OracleClient
+
+<ul>
+ <li>Have a working mono and mcs</li>
+
+ <li>Have access to an Oracle 8i database or download it from
+ <a href="http://www.oracle.com/">Oracle</a>. Registration to the
+ Oracle Technology Network is free. If installing on Linux, I suggest you
+ do a lot of searching to see how others installed Oracle on Linux.</li>
+
+ <li>Make sure Mono.Data.OracleClient.dll assembly is built, if not, go
+ into Mono.Data.OracleClient and do a make -f makefile.gnu (on Linux) or
+ ../../nant/NAnt.exe (on Cygwin).</li>
+
+ <li>The OCI Glue Library Mono.Data.OracleClient.ociglue.dll will need to be
+ created as well. Has only been tested with lc (Microsoft Visual C++ command-line compiler).
+ There is a make file for Microsoft C++ and Borland C++. I'm sure it wouldn't be hard
+ to create a makefile for gcc if installing on Linux.</li>
+
+ <li>Take a look at TestOracleClient.cs found at mcs/class/System.Data.OracleClient/Test</li>
+
+ <li>Has a connection string format:
+<pre>
+"Data Source=tnsname;User ID=userid;Password=password"
+</pre>
+ </li>
+ <li>C# Example:
+<pre>
+ using System;
+ using System.Data;
+ using System.Data.OracleClient;
+
+ public class Test
+ {
+ public static void Main(string[] args)
+ {
+ string connectionString =
+ "Data Source=testdb;" +
+ "User ID=scott;" +
+ "Password=tiger;";
+ IDbConnection dbcon;
+ dbcon = new OracleConnection(connectionString);
+ IDbCommand dbcmd = dbcon.CreateCommand();
+ string sql =
+ "insert into scott.emp " +
+ "(empno, ename, job, sal, deptno) " +
+ "values(123," +
+ "'Don Smith'," +
+ "'Cook'," +
+ "23021," +
+ "20)";
+ dbcmd.ConnectionString = sql;
+ dbcmd.ExecuteNonQuery();
+ dbcmd.Dispose();
+ dbcmd = null;
+ dbcon.Close();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs -r System.Data.dll \
+ -r System.Data.OracleClient.dll
+</pre>
+ </li>
+ <li>Build on Windows via Cygwin:
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ TestExample.cs \
+ -lib:C:/cygwin/home/MyHome/mono/install/lib \
+ -r System.Data.dll -r System.Data.OracleClient.dll
+</pre>
+ </li>
+ </ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
+</pre>
+ </li>
+
+</ul>
+
* PostgreSQL Data Provider
<ul>
- <li>Exists in namespace Mono.Data.PostgreSql and assembly Mono.Data.PostgreSql
+ <li>Exists in namespace Mono.Data.PostgreSql and assembly Mono.Data.PostgreSql</li>
<li>Is a Mono Data Provider for the <a href="http://www.postgresql.org/">PostgreSQL</a>
- client/server database management system.
+ client/server database management system.</li>
<li>Written in C# and has C# bindings to the PostgreSQL C Client library pq.dll on Windows
- and libpq.so on Linux.
+ and libpq.so on Linux.</li>
+
+ <li>Alternative to the PostgreSQL provider in Mono:
+ <ul>
+ <li><a href="http://gborg.postgresql.org/project/npgsql/projdisplay.php">Npgsql</a>
+ is a Managed PostgreSQL provider written in 100% C#, does not require a client library,
+ and works on Microsoft .NET and Mono.
+ </li>
+ </ul>
+ </li>
+
+ <li>See Testing for both Mono's Mono.Data.PostgreSqlClient and Npgsql.</li>
</ul>
-* Current Status
+** Current Status
<ul>
<li>We are able to do simple CREATE TABLE, DROP TABLE, UPDATE, INSERT, and
See the test mcs/class/System.Data/Test/TestSqlDataAdapter.cs to see it in action.
</ul>
-* Testing the PostgreSQL Provider
+** Action Plan
+
+ <p>More testing and fixing bugs...
+
+ <p>Eventually replace the PostgreSQL data provider in Mono
+ with <a href="http://gborg.postgresql.org/project/npgsql/projdisplay.php">Npgsql</a>.
+ Npgsql is a .Net Data Provider for PostgreSQL which implements
+ the <a href="http://developer.postgresql.org/docs/postgres/protocol.html">PostgreSQL Frontend/Backend Protocol</a>.
+ Npgsql is implemented in 100% C#. This provider was created by Francisco Figueiredo jr.
+ and has many programmers developing the provider.
+
+** Testing Mono's Mono.Data.PostgreSqlClient
<ul>
* <p>In order to test Mono.Data.PostgreSqlClient, you will need to have
access to a remote PostgreSQL DBMS, or you will have to install
- one locally. PostgreSQL was first ADO.NET provider created in Mono.
+ one locally. PostgreSQL was the first ADO.NET provider created in Mono.
<p>Why use PostgreSQL? Because it is free software, has a client
library that is easy to use, PostgreSQL is easy to install on
user "postgres".
<pre>
-"host=localhost;dbname=test;user=postgres"
+"Server=localhost;Database=test;User ID=postgres;Password=fun2db"
+ (or)
+"host=localhost;dbname=test;user=postgres;password=fun2db"
</pre>
</ul>
* <p>Important notes from this file are:
<ul>
- <p><b>2.</b> - Install the latest <a href="http://www.neuro.gatech.edu/users/cwilson/cygutils/OBSOLETE/V1.1/cygipc/index.html">CygIPC</a> package.
+ <p><b>2.</b> - Install the latest <a href="http://www.neuro.gatech.edu/users/cwilson/cygutils/cygipc/index.html">CygIPC</a> package.
+ Cygwin includes a utility bunzip2 which can be used to unzip it. Now, change to
+ the root directory by
+ typing "cd /" then
+ you can use "tar xvf cygipc.xxx.tar" to untar it
+ in the root directory in cygwin.
- <p>The cygipc package contains the ipc-daemon you will need
+ <p>The cygipc package contains the support to run ipc-daemon
+ that you will need
to run before you can
run the PostgreSQL DBMS Server daemon (postmaster) or run
initdb which initializes the PostgreSQL database.
</ul>
<p>In the path mcs/class/System.Data/Test
- there is a PostgreSQL test program named
+ there is a test for Mono.Data.PostgreSqlClient named
PostgreTest.cs. Thanks goes to Gonzalo for creating the original
PostgreSQL test.
-
- <p>To use it to test System.Data, you
- modify the file to your PostgreSQL database
- connection requirements:
-
- <p>
- <ul>
- <li><b>dbname</b> database, ie., test</li>
- <li><b>host</b> hostname of the PostgreSQL DBMS Server, ie., localhost</li>
- <li><b>user</b> username, ie., someuser</li>
- <li><b>password</b> password, ie., mypass1234</li>
- </ul>
-
- <p>The connection string is in OLE-DB connection string format. Internally,
- SqlConnection converts this to the PostgreSQL connection string format.
-
- <p>
-<pre>
- OLE-DB: "host=localhost;dbname=test;user=joe;password=smoe"
-PostgreSQL: "host=localhost dbname=test user=joe password=smoe"
-</pre>
-
- <p>
- Note that OLE-DB includes the semicolons while PostgreSQL's connection
- string does not.
<p>
To compile the PostgresTest.cs program, do:
to PgSqlConnection, then you need to run mcs like:
<pre>
- mono f:/cygwin/home/DanielMorgan/mono/install/bin/mcs.exe \
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
PostgresTest.cs \
-r System.Data.dll \
-r Mono.Data.PostgreSqlClient.dll
To run using mono, do:
<pre>
mono PostgresTest.exe
-</pre>
-
- <p>Below, I show how the output from PostgresTest. I have omitted a lot
- of the meta data for the columns except two columns. The classes
- used were from Mono.Data.PostgreSqlClient and were used to connect to a
- PostgreSQL database and retrieve data.
-
-<p>
-<pre>
-
- danmorg@DANPC ~/mono/mcs/class/System.Data/Test
- $ mcs PostgresTest.cs -r System.Data.dll
-
- danmorg@DANPC ~/mono/mcs/class/System.Data/Test
- $ mono PostgresTest.exe
- Postgres provider specific tests...
-
- Drop table:
- Error (don't worry about this one)SqlError:PGRES_FATAL_ERROR ERROR:
- table "mono_postgres_test" does not exist
- <Stack Trace>
-
- Create table with all supported types:
- OK
- Insert values for all known types:
- OK
- Update values:
- OK
- Insert values for all known types:
- OK
- Aggregate: count(*)
- Agg Result: 2
- Aggregate: min(text_value)
- Agg Result: This is a text
- Aggregate: max(int4_value)
- Agg Result: 1048000
- Aggregate: sum(int4_value)
- Agg Result: 1048003
- Select values from the database:
- Result is from a SELECT SQL Query. Records Affected: -1
- Result Set 1...
- Total Columns: 28
- ColumnName = boolean_value
- ColumnOrdinal = 1
- ColumnSize = 1
- NumericPrecision = 0
- NumericScale = 0
- IsUnique = False
- IsKey =
- BaseCatalogName =
- BaseColumnName = boolean_value
- BaseSchemaName =
- BaseTableName =
- DataType = System.Boolean
- AllowDBNull = False
- ProviderType = 16
- IsAliased = False
- IsExpression = False
- IsIdentity = False
- IsAutoIncrement = False
- IsRowVersion = False
- IsHidden = False
- IsLong = False
- IsReadOnly = False
-
- ...
-
- ColumnName = null_timestamp_value
- ColumnOrdinal = 28
- ColumnSize = 8
- NumericPrecision = 0
- NumericScale = 0
- IsUnique = False
- IsKey =
- BaseCatalogName =
- BaseColumnName = null_timestamp_value
- BaseSchemaName =
- BaseTableName =
- DataType = System.DateTime
- AllowDBNull = False
- ProviderType = 1184
- IsAliased = False
- IsExpression = False
- IsIdentity = False
- IsAutoIncrement = False
- IsRowVersion = False
- IsHidden = False
- IsLong = False
- IsReadOnly = False
-
- Gonna do a Read() now...
- Row 0:
- Col 0: boolean_value: False
- Col 1: int2_value: 5
- Col 2: int4_value: 3
- Col 3: bigint_value: 9
- Col 4: float_value: 3.141590
- Col 5: double_value: 3.14159
- Col 6: numeric_value: 123456789012.345
- Col 7: char_value: Mono.Data!
- Col 8: varchar_value: It was not me!
- Col 9: text_value: We got data!
- Col 10: point_value: (1,0)
- Col 11: time_value: 01/01/1 21:13:14
- Col 12: date_value: 02/29/2000 00:00:00
- Col 13: timestamp_value: 02/29/2004 14:00:11
- Col 14: null_boolean_value is NULL
- Col 15: null_int2_value is NULL
- Col 16: null_int4_value is NULL
- Col 17: null_bigint_value is NULL
- Col 18: null_float_value is NULL
- Col 19: null_double_value is NULL
- Col 20: null_numeric_value is NULL
- Col 21: null_char_value is NULL
- Col 22: null_varchar_value is NULL
- Col 23: null_text_value is NULL
- Col 24: null_point_value is NULL
- Col 25: null_time_value is NULL
- Col 26: null_date_value is NULL
- Col 27: null_timestamp_value is NULL
- Row 1:
- Col 0: boolean_value: True
- Col 1: int2_value: -22
- Col 2: int4_value: 1048000
- Col 3: bigint_value: 123456789012345
- Col 4: float_value: 3.141590
- Col 5: double_value: 3.14159
- Col 6: numeric_value: 123456789012.345
- Col 7: char_value: This is a char
- Col 8: varchar_value: This is a varchar
- Col 9: text_value: This is a text
- Col 10: point_value: (1,0)
- Col 11: time_value: 01/01/1 21:13:14
- Col 12: date_value: 02/29/2000 00:00:00
- Col 13: timestamp_value: 02/29/2004 14:00:11
- Col 14: null_boolean_value is NULL
- Col 15: null_int2_value is NULL
- Col 16: null_int4_value is NULL
- Col 17: null_bigint_value is NULL
- Col 18: null_float_value is NULL
- Col 19: null_double_value is NULL
- Col 20: null_numeric_value is NULL
- Col 21: null_char_value is NULL
- Col 22: null_varchar_value is NULL
- Col 23: null_text_value is NULL
- Col 24: null_point_value is NULL
- Col 25: null_time_value is NULL
- Col 26: null_date_value is NULL
- Col 27: null_timestamp_value is NULL
- Total Rows Retrieved: 2
- Total Result sets: 1
- Call ExecuteReader with a SQL Command.
- (Not INSERT,UPDATE,DELETE
- ).
- Result is from a SQL Command not (INSERT,UPDATE,DELETE).
- Records Affected: -1
- Total Result sets: 0
- Call ExecuteReader with a SQL Command.
- (Is INSERT,UPDATE,DELETE)
- .
- Result is from a SQL Command (INSERT,UPDATE,DELETE). Records Affected: 1
- Total Result sets: 0
- Calling stored procedure version()
- Result: PostgreSQL 7.2.1 on i686-pc-cygwin, compiled by GCC 2.95.3-5
- Database Server Version: PostgreSQL 7.2.1 on i686-pc-cygwin,
- compiled by GCC 2.9
- 5.3-5
- Clean up...
- Drop table...
- OK
- RESULT: 0
+</pre>
+ <p>C# Example for Mono.Data.PostgreSqlClient:
+<pre>
+ using System;
+ using System.Data;
+ using Mono.Data.PostgreSqlClient;
+
+ public class Test
+ {
+ public static void Main(string[] args)
+ {
+ string connectionString =
+ "Server=localhost;" +
+ "Database=test;" +
+ "User ID=postgres;" +
+ "Password=fun2db;";
+ IDbConnection dbcon;
+ dbcon = new PgConnection(connectionString);
+ IDbCommand dbcmd = dbcon.CreateCommand();
+ // requires a table to be created named employee
+ // with columns firstname and lastname
+ // such as,
+ // CREATE TABLE employee (
+ // firstname varchar(32),
+ // lastname varchar(32));
+ string sql =
+ "SELECT firstname, lastname" +
+ "FROM employee";
+ dbcmd.ConnectionString = sql;
+ IDataReader reader = dbcmd.ExecuteReader();
+ while(reader.Read()) {
+ string FirstName = reader["firstname"];
+ string LastName = reader["lastname"];
+ Console.WriteLine("Name: " +
+ FirstName + " " + LastName);
+ }
+ // clean up
+ reader.Close();
+ reader = null;
+ dbcmd.Dispose();
+ dbcmd = null;
+ dbcon.Close();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs -r System.Data.dll \
+ -r Mono.Data.PostgreSqlClient.dll
+</pre>
+ </li>
+ <li>Build on Windows via Cygwin:
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ TestExample.cs \
+ -lib:C:/cygwin/home/MyHome/mono/install/lib \
+ -r System.Data.dll -r Mono.Data.PostgreSqlClient.dll
+</pre>
+ </li>
+ </ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
</pre>
+</li>
+</ul>
-* Action Plan
+** Testing Npgsql
- <p>Eventually replace the PostgreSQL data provider in Mono
- with <a href="http://gborg.postgresql.org/project/npgsql/projdisplay.php">Npgsql</a>.
- Npgsql is a .Net Data Provider for PostgreSQL which implements
- the <a href="http://developer.postgresql.org/docs/postgres/protocol.html">PostgreSQL Frontend/Backend Protocol</a>.
- Npgsql is implemented in 100% C#. This provider was created by Francisco Figueiredo jr.
- and has many programmers developing the provider.
+<ul>
+ <li>Have a working mono and mcs</li>
+
+ <li>Get <a href="http://gborg.postgresql.org/project/npgsql/projdisplay.php">Npgsql</a>
+ and make sure the binary assembly Npgsql.dll is installed in the same place that the
+ mono class libraries are located.
+
+ <li>Read the Testing notes for Mono.Data.PostgreSqlClient too
+
+ <li>C# Example for Npgsql:
+<pre>
+ using System;
+ using System.Data;
+ using Npgsql;
+
+ public class Test
+ {
+ public static void Main(string[] args)
+ {
+ string connectionString =
+ "Server=localhost;" +
+ "Database=test;" +
+ "User ID=postgres;" +
+ "Password=fun2db;";
+ IDbConnection dbcon;
+ dbcon = new NpgsqlConnection(connectionString);
+ IDbCommand dbcmd = dbcon.CreateCommand();
+ // requires a table to be created named employee
+ // with columns firstname and lastname
+ // such as,
+ // CREATE TABLE employee (
+ // firstname varchar(32),
+ // lastname varchar(32));
+ string sql =
+ "SELECT firstname, lastname " +
+ "FROM employee";
+ dbcmd.ConnectionString = sql;
+ IDataReader reader = dbcmd.ExecuteReader();
+ while(reader.Read()) {
+ string FirstName = reader["firstname"];
+ string LastName = reader["lastname"];
+ Console.WriteLine("Name: " +
+ FirstName + " " + LastName);
+ }
+ // clean up
+ reader.Close();
+ reader = null;
+ dbcmd.Dispose();
+ dbcmd = null;
+ dbcon.Close();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs -r System.Data.dll \
+ -r Npgsql.dll
+</pre>
+ </li>
+ <li>Build on Windows via Cygwin:
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ TestExample.cs \
+ -lib:C:/cygwin/home/MyHome/mono/install/lib \
+ -r System.Data.dll -r Npgsql.dll
+</pre>
+ </li>
+ </ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
+</pre>
+</li>
+</ul>
+
* Microsoft SQL Server Provider
<ul>
- <li>ADO.NET Provider for Microsoft SQL Server 7/2000 databases
+ <li>ADO.NET Provider for Microsoft SQL Server 7/2000 databases</li>
- <li>Exists in namespace System.Data.SqlClient and assembly System.Data
+ <li>Exists in namespace System.Data.SqlClient and assembly System.Data</li>
- <li>Created by Tim Coleman
+ <li>Created by Tim Coleman</li>
<li>Used the <a href="http://www.freetds.org/">FreeTDS</a> and
- <a href="http://jtds.sourceforge.net/">jTDS</a> projects as resources.
+ <a href="http://jtds.sourceforge.net/">jTDS</a> projects as resources.</li>
- <li>Implemented in 100% C#
+ <li>Implemented in 100% C#</li>
- <li>Is similar to the Mono.Data.TdsClient and Mono.Data.SybaseClient providers.
+ <li>Is similar to the Mono.Data.TdsClient and Mono.Data.SybaseClient providers.</li>
+
+ <li>Requires the assembly Mono.Data.Tds.dll which implements the TDS protocol in 100% C#.</li>
+
+ <li>Uses TDS Protocol Version 7.0</li>
+
+ <li>Does not support trusted connections</li>
</ul>
-* Current Status
-
+
+** Current Status
+
+
<ul>
- <li>Able to connect to Microsoft SQL Server 7/2000 databases
+ <li>Able to connect to Microsoft SQL Server 7/2000 databases</li>
- <li>Connection pooling works.
+ <li>Connection pooling works.</li>
- <li>Stored Procedures work
+ <li>Stored Procedures work</li>
- <li>Parameters work.
+ <li>Parameters work.</li>
- <li>Prepare works.
+ <li>Prepare works.</li>
<li>SQL commands can be executed
- via ExecuteNonQuery() of a SqlCommand.
+ via ExecuteNonQuery() of a SqlCommand.</li>
<li>SQL aggregates can be executed and a single row and single column
- result can be retrieved via ExecuteScalar() of a SqlCommand
+ result can be retrieved via ExecuteScalar() of a SqlCommand</li>
<li>SQL queries can be executed via ExecuteReader() and results
- can be retrieved via SqlDataReader.
+ can be retrieved via SqlDataReader.</li>
<li>a DataTable with schema info about a result can be gotten via GetSchemaTable()
- in a SqlDataReader
+ in a SqlDataReader</li>
- <li>XML can be read via ExecuteXmlReader in a SqlCommand.
+ <li>XML can be read via ExecuteXmlReader in a SqlCommand.</li>
- <li>Data can be filled in a DataTable in a DataSet via a SqlDataAdapter
+ <li>Data can be filled in a DataTable in a DataSet via a SqlDataAdapter</li>
- <li>Uses TDS Protocol Version 7.0
+ <li>Uses TDS Protocol Version 7.0</li>
- <li><a href="http://www.go-mono.com/tds-providers.html">Design of the Microsoft SQL Server, Sybase, and TDS Providers in Mono</a>
+ <li><a href="http://www.go-mono.com/tds-providers.html">Design of the Microsoft SQL Server, Sybase, and TDS Providers in Mono</a></li>
</ul>
-* Action plan
+** Action plan
<ul>
<li>Connection timeouts is being developed now.
- <li>TODO
+ <li>Needs more testing...
+
</ul>
+
+** Testing
+
+<ul>
+ <li>Have a working mono and mcs installed</li>
+
+ <li>Have access to a Microsoft SQL Server database
+ or either download it:
+ <ul>
+ <li><a href="http://www.microsoft.com/sql/default.asp">Microsoft SQL Server</a></li>
+ </ul>
+ </li>
+
+ <li>Located at mcs/class/System.Data/Test is a test for System.Data.SqlClient
+ named SqlTest.cs and you could use this as a basis for your test.</li>
+
+ <li>C# Example:
+<pre>
+ using System;
+ using System.Data;
+ using System.Data.SqlClient;
+
+ public class Test
+ {
+ public static void Main(string[] args)
+ {
+ string connectionString =
+ "Server=localhost;" +
+ "Database=pubs;" +
+ "User ID=sa;" +
+ "Password=;";
+ IDbConnection dbcon;
+ dbcon = new SqlConnection(connectionString);
+ IDbCommand dbcmd = dbcon.CreateCommand();
+ string sql =
+ "SELECT fname, lname " +
+ "FROM employee";
+ dbcmd.ConnectionString = sql;
+ IDataReader reader = dbcmd.ExecuteReader();
+ while(reader.Read()) {
+ string FirstName = reader["fname"];
+ string LastName = reader["lname"];
+ Console.WriteLine("Name: " +
+ FirstName + " " + LastName);
+ }
+ // clean up
+ reader.Close();
+ reader = null;
+ dbcmd.Dispose();
+ dbcmd = null;
+ dbcon.Close();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs -r System.Data.dll
+</pre>
+ </li>
+ <li>Build on Windows via Cygwin:
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ TestExample.cs -r System.Data.dll
+</pre>
+ </li>
+ </ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
+</pre>
+ </li>
+
+</ul>
+
* SQL Lite Data Provider
<ul>
- <li>Exists in namespace and assembly Mono.Data.SqliteClient
+ <li>Exists in namespace and assembly Mono.Data.SqliteClient</li>
- <li>Created by Vladimir Vukicevic
+ <li>Created by Vladimir Vukicevic</li>
<li><a href"http://www.hwaci.com/sw/sqlite/download.html">SQL Lite</a>
binaries exist for Linux and Windows. sqlite.dll on Windows
- and sqlite.so on Linux.
+ and sqlite.so on Linux.</li>
</ul>
-* Current Status
+** Current Status
<ul>
- <li>Able to connect, execute commands, and retrieve data...
+ <li>Able to connect, execute commands, and retrieve data...</li>
- <li>Works in mPhoto
+ <li>Works in mPhoto by providing access to a SQL Lite database to store images.</li>
</ul>
-* Action Plan
+** Action Plan
<ul>
<li>Create a DataAdapter for SQL Lite named SqliteDataAdapter that can be used to
- Fill a DataTable in a DataSet
+ Fill a DataTable in a DataSet</li>
- <li>TODO
+ <li>Get the method GetSchemaTable() in class SqliteDataReader to return a DataTable
+ that works</li>
</ul>
+
+** Testing
+
+<ul>
+ <li>Have a working mcs and mono</li>
+ <li>Make sure Mono.Data.SqliteClient.dll was built and is installed
+ in the same place as the mono class libraries.</li>
+ <li>If you do not have <a href"http://www.hwaci.com/sw/sqlite/download.html">SQL Lite</a>,
+ download it. There are binaries for Windows and Linux.</li>
+ <li>There is a test named SqliteTest.cs found at mcs/class/Mono.Data.SqliteTest/Test</li>
+ <li>Has a connection string format of "URI=file:some/path". For example,
+ the connection string "URI=file:SqliteTest.db" will use the database file
+ named SqliteTest.db, if it does not exist, the file will be created.</li>
+ <li>C# Example:
+<pre>
+ using System;
+ using System.Data;
+ using Mono.Data.SqliteClient;
+
+ public class Test
+ {
+ public static void Main(string[] args)
+ {
+ string connectionString = "URI=file:SqliteTest.db";
+ IDbConnection dbcon;
+ dbcon = new MySQLConnection(connectionString);
+ IDbCommand dbcmd = dbcon.CreateCommand();
+ // requires a table to be created named employee
+ // with columns firstname and lastname
+ // such as,
+ // CREATE TABLE employee (
+ // firstname varchar(32),
+ // lastname varchar(32));
+ string sql =
+ "SELECT firstname, lastname " +
+ "FROM employee";
+ dbcmd.ConnectionString = sql;
+ IDataReader reader = dbcmd.ExecuteReader();
+ while(reader.Read()) {
+ string FirstName = reader[0];
+ string LastName = reader[1];
+ Console.WriteLine("Name: " +
+ FirstName + " " + LastName);
+ }
+ // clean up
+ reader.Close();
+ reader = null;
+ dbcmd.Dispose();
+ dbcmd = null;
+ dbcon.Close();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs -r System.Data.dll \
+ -r Mono.Data.SqliteClient.dll
+</pre>
+ </li>
+ <li>Build on Windows via Cygwin:
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ TestExample.cs \
+ -lib:C:/cygwin/home/MyHome/mono/install/lib \
+ -r System.Data.dll \
+ -r Mono.Data.SqliteClient.dll
+</pre>
+ </li>
+ </ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
+</pre>
+ </li>
+
+</ul>
+
* Sybase Data Provider
<ul>
- <li>ADO.NET Provider for Sybase SQL Server databases
+ <li>ADO.NET Provider for Sybase SQL Server databases</li>
- <li>Exists in namespace Mono.Data.SybaseClient and assembly Mono.Data.SybaseClient
+ <li>Exists in namespace Mono.Data.SybaseClient and assembly Mono.Data.SybaseClient</li>
- <li>Created by Tim Coleman
+ <li>Created by Tim Coleman</li>
<li>Used the <a href="http://www.freetds.org/">FreeTDS</a> and
- <a href="http://jtds.sourceforge.net/">jTDS</a> projects as resources.
+ <a href="http://jtds.sourceforge.net/">jTDS</a> projects as resources.</li>
- <li>Implemented in 100% C#
+ <li>Implemented in 100% C#</li>
- <li>Is similar to the Mono.Data.TdsClient and System.Data.SqlClient providers.
+ <li>Is similar to the Mono.Data.TdsClient and System.Data.SqlClient providers.</li>
- <li>Uses TDS Protocol Version 5.0
+ <li>Requires the assembly Mono.Data.Tds.dll which implements the TDS protocol in 100% C#.</li>
- <li><a href="http://www.go-mono.com/tds-providers.html">Design of the Microsoft SQL Server, Sybase, and TDS Providers in Mono</a>
+ <li>Uses TDS Protocol Version 5.0</li>
+
+ <li>Does not support trusted connections</li>
</ul>
-* Current Status
+** Current Status
<ul>
- <li>Able to connect to Sybase databases
+ <li>Able to connect to Sybase databases</li>
<li>SQL commands can be executed
- via ExecuteNonQuery() of a SybaseCommand.
+ via ExecuteNonQuery() of a SybaseCommand.</li>
<li>SQL aggregates can be executed and a single row and single column
- result can be retrieved via ExecuteScalar() of a SybaseCommand
+ result can be retrieved via ExecuteScalar() of a SybaseCommand</li>
<li>SQL queries can be executed via ExecuteReader() and results
- can be retrieved via SybaseDataReader.
+ can be retrieved via SybaseDataReader.</li>
<li>a DataTable with schema info about a result can be gotten via GetSchemaTable()
- in a SybaseDataReader
+ in a SybaseDataReader</li>
- <li>Data can be filled in a DataTable in a DataSet via a SybaseDataAdapter
+ <li>Data can be filled in a DataTable in a DataSet via a SybaseDataAdapter</li>
</ul>
-* Action plan
+** Action plan
<ul>
<li>Connection timeouts is being developed now.
+
+ <li>Needs more testing...
- <li>TODO
</ul>
+
+** Testing
+
+<ul>
+ <li>Have a working mono and mcs installed</li>
+
+ <li>Have access to a Sybase database
+ or either download it:
+ <ul>
+ <li><a href="http://www.sybase.com/downloads">Sybase</a></li>
+ </ul>
+ </li>
+
+ <li>Located at mcs/class/System.Data/Test is a test for System.Data.SqlClient
+ named SqlTest.cs and you could use this as a basis for your test.</li>
+
+ <li>C# Example:
+<pre>
+ using System;
+ using System.Data;
+ using Mono.Data.SybaseClient;
+
+ public class Test
+ {
+ public static void Main(string[] args)
+ {
+ string connectionString =
+ "Server=localhost;" +
+ "Database=pubs;" +
+ "User ID=sa;" +
+ "Password=;";
+ IDbConnection dbcon;
+ dbcon = new SybaseConnection(connectionString);
+ IDbCommand dbcmd = dbcon.CreateCommand();
+ string sql =
+ "SELECT fname, lname " +
+ "FROM employee";
+ dbcmd.ConnectionString = sql;
+ IDataReader reader = dbcmd.ExecuteReader();
+ while(reader.Read()) {
+ string FirstName = reader["fname"];
+ string LastName = reader["lname"];
+ Console.WriteLine("Name: " +
+ FirstName + " " + LastName);
+ }
+ // clean up
+ reader.Close();
+ reader = null;
+ dbcmd.Dispose();
+ dbcmd = null;
+ dbcon.Close();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs -r System.Data.dll \
+ -r Mono.Data.SybaseClient.dll
+</pre>
+ </li>
+ <li>Build on Windows via Cygwin:
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ TestExample.cs \
+ -lib:C:/cygwin/home/MyHome/mono/install/lib \
+ -r System.Data.dll -r Mono.Data.SybaseClient.dll
+</pre>
+ </li>
+ </ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
+</pre>
+ </li>
+
+</ul>
+
* TDS Generic Provider
<ul>
- <li>ADO.NET Provider for older Sybase and Microsoft SQL Server databases
+ <li>ADO.NET Provider for older Sybase and Microsoft SQL Server databases</li>
- <li>Exists in namespace Mono.Data.TdsClient and assembly Mono.Data.TdsClient
+ <li>Exists in namespace Mono.Data.TdsClient and assembly Mono.Data.TdsClient</li>
- <li>Created by Tim Coleman
+ <li>Created by Tim Coleman</li>
<li>Used the <a href="http://www.freetds.org/">FreeTDS</a> and
- <a href="http://jtds.sourceforge.net/">jTDS</a> projects as resources.
+ <a href="http://jtds.sourceforge.net/">jTDS</a> projects as resources.</li>
- <li>Implemented in 100% C#
+ <li>Implemented in 100% C#</li>
- <li>Is similar to the Mono.Data.SybaseClient and System.Data.SqlClient providers.
+ <li>Is similar to the Mono.Data.SybaseClient and System.Data.SqlClient providers.</li>
- <li>Uses TDS Protocol Version 4.2 by default
+ <li>Requires the assembly Mono.Data.Tds.dll which implements the TDS protocol in 100% C#.</li>
- <li><a href="http://www.go-mono.com/tds-providers.html">Design of the Microsoft SQL Server, Sybase, and TDS Providers in Mono</a>
+ <li>Uses TDS Protocol Version 4.2 by default</li>
+
+ <li>Does not support trusted connections</li>
</ul>
-* Current Status
+** Current Status
+
<ul>
<li>Only builds on Windows currently due to mcs does not support modules and mcs
- has problems with code that is internal.
+ has problems with code that is internal.</li>
- <li>Able to connect to Microsoft SQL Server and Sybase databases
+ <li>Able to connect to Microsoft SQL Server and Sybase databases</li>
<li>SQL commands can be executed
- via ExecuteNonQuery() of a TdsCommand.
+ via ExecuteNonQuery() of a TdsCommand.</li>
<li>SQL aggregates can be executed and a single row and single column
- result can be retrieved via ExecuteScalar() of a TdsCommand
+ result can be retrieved via ExecuteScalar() of a TdsCommand</li>
<li>SQL queries can be executed via ExecuteReader() and results
- can be retrieved via TdsDataReader.
+ can be retrieved via TdsDataReader.</li>
<li>a DataTable with schema info about a result can be gotten via GetSchemaTable()
- in a TdsDataReader
+ in a TdsDataReader</li>
- <li>Data can be filled in a DataTable in a DataSet via a TdsDataAdapter
+ <li>Data can be filled in a DataTable in a DataSet via a TdsDataAdapter</li>
</ul>
-* Action plan
+** Action plan
<ul>
- <li>Connection timeouts is being developed now.
+ <li>Connection timeouts is being developed now.</li>
+
+ <li>TODO</li>
+</ul>
+
+** Testing
- <li>TODO
+<ul>
+ <li>Have a working mono and mcs installed</li>
+
+ <li>Have access to a Sybase or Microsoft SQL Server database
+ or either download it:
+ <ul>
+ <li><a href="http://www.microsoft.com/sql/default.asp">Microsoft SQL Server</a></li>
+ <li><a href="http://www.sybase.com/downloads">Sybase</a></li>
+ </ul>
+ </li>
+
+ <li>Located at mcs/class/System.Data/Test is a test for System.Data.SqlClient
+ named SqlTest.cs and you could use this as a basis for your test.</li>
+
+ <li>C# Example:
+<pre>
+ using System;
+ using System.Data;
+ using Mono.Data.TdsClient;
+
+ public class Test
+ {
+ public static void Main(string[] args)
+ {
+ string connectionString =
+ "Server=localhost;" +
+ "Database=pubs;" +
+ "User ID=sa;" +
+ "Password=;";
+ IDbConnection dbcon;
+ dbcon = new TdsConnection(connectionString);
+ IDbCommand dbcmd = dbcon.CreateCommand();
+ string sql =
+ "SELECT fname, lname " +
+ "FROM employee";
+ dbcmd.ConnectionString = sql;
+ IDataReader reader = dbcmd.ExecuteReader();
+ while(reader.Read()) {
+ string FirstName = reader["fname"];
+ string LastName = reader["lname"];
+ Console.WriteLine("Name: " +
+ FirstName + " " + LastName);
+ }
+ // clean up
+ reader.Close();
+ reader = null;
+ dbcmd.Dispose();
+ dbcmd = null;
+ dbcon.Close();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs -r System.Data.dll \
+ -r Mono.Data.TdsClient.dll
+</pre>
+ </li>
+ <li>Build on Windows via Cygwin:
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ TestExample.cs \
+ -lib:C:/cygwin/home/MyHome/mono/install/lib \
+ -r System.Data.dll -r Mono.Data.TdsClient.dll
+</pre>
+ </li>
+ </ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
+</pre>
+ </li>
</ul>
+
0,Plans,plans.html,plans.src
1,ADO.NET,ado-net.html,ado-net.src
2,Firebird Interbase,firebird.html,firebird.src
+2,IBM DB2,ibmdb2.html,ibmdb2.src
2,Microsft SQL Server,sqlclient.html,sqlclient.src
2,MySQL,mysql.html,mysql.src
2,ODBC,odbc.html,odbc.src
OBJECTS= \
deploy/ado-net.html \
deploy/firebird.html \
+ deploy/ibmdb2.html \
deploy/mysql.html \
deploy/odbc.html \
deploy/oledb.html \
.SH PROVIDERS
.nf
-PROVIDER NAME NAMESPACE ASSEMBLY
-
-OleDb OLE DB System.Data.OleDb System.Data
-SqlClient MS SQL 7/2000 System.Data.SqlClient System.Data
-Odbc ODBC System.Data.Odbc System.Data
-MySql MySQL Mono.Data.MySql Mono.Data.MySql
-Sqlite SQL Lite Mono.Data.SqliteClient Mono.Data.SqliteClient
-Sybase Sybase Mono.Data.SybaseClient Mono.Data.SybaseClient
-Tds TDS Generic Mono.Data.TdsClient Mono.Data.TdsClient
-PostgreSql PostgreSQL Mono.Data.PostgreSqlClient Mono.Data.PostgreSqlClient
+PROVIDER NAME NAMESPACE ASSEMBLY
+
+Internal
+--------
+
+OleDb OLE DB System.Data.OleDb System.Data
+SqlClient MS SQL 7/2000 System.Data.SqlClient System.Data
+Odbc ODBC System.Data.Odbc System.Data
+
+External to System.Data
+----------------------
+MySql MySQL Mono.Data.MySql Mono.Data.MySql
+Sqlite SQL Lite Mono.Data.SqliteClient Mono.Data.SqliteClient
+Sybase Sybase Mono.Data.SybaseClient Mono.Data.SybaseClient
+Tds TDS Generic Mono.Data.TdsClient Mono.Data.TdsClient
+PostgreSql MonoPostgreSQL Mono.Data.PostgreSqlClient Mono.Data.PostgreSqlClient
+
+External to Mono
+----------------
+
+Npgsql PostgreSQL.NET Npgsql Npgsql
+MySQLNet ByteFX MySQL ByteFX.Data.MySQL ByteFX.Data
.fi
.SH CONNECTION STRING SAMPLES
* 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:
+ <ul>
+ <li>rodrigo -AT- ximian.comNOSPAM - <b>Rodrigo Moya</b> - coordinator
+ for the ADO.NET implementation and works on the OLE DB provider</li>
+ <li>danmorg -AT- sc.rr.comNOSPAM - <b>Daniel Morgan</b> - works on
+ the MySQL, PostgreSQL, and Oracle providers</li>
+ <li>tim -AT- timcoleman.comNOSPAM - <b>Tim Coleman</b> - works on
+ the Microsoft SQL Server, Sybase, and TDS providers</li>
+ <li>brianlritchie -AT- hotmail.comNOSPAM - <b>Brian Ritchie</b> - works on
+ the ODBC provider and the ProviderFactory</li>
+ <li>vladimir -AT- pobox.comNOSPAM - <b>Vladimir Vukicevic</b> - works on
+ the SQL Lite provider</li>
+ <li>cleared -AT- rogers.comNOSPAM - <b>Christopher Bockner</b> - works on
+ the IBM DB2 provider</li>
+ <li>vi64pa -AT- koti.soon.fiNOSPAM - <b>Ville Palo</b> - works on XML stuff in System.Data
+ including DataSet, XmlDataDocument, and has done lots of testing</li>
+ </ul>
-
* Action plan
<p>The current plan to implement ADO.NET is as follows:
<ul>
<li>Either create ADO.NET providers or modify pre-exiting ADO.NET providers to
- work with Mono
+ work with Mono</li>
<ul>
<li>Create ADO.NET Providers
<ul>
- <li><a href="http://www.go-mono.com/mysql.html">MySQL</a>
- <li><a href="http://www.go-mono.com/odbc.html">ODBC</a>
- <li><a href="http://www.go-mono.com/oracle.html">Oracle</a>
- <li><a href="http://www.go-mono.com/oledb.html">OLE DB</a>
- <li><a href="http://www.go-mono.com/postgresql.html">PostgreSQL</a>
- <li><a href="http://www.go-mono.com/sqlclient.html">Microsoft SQL Server</a>
- <li><a href="http://www.go-mono.com/sqlite.html">SQL Lite</a>
- <li><a href="http://www.go-mono.com/sybase.html">Sybase</a>
- <li><a href="http://www.go-mono.com/tdsclient.html">TDS Generic</a>
+ <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>
<li>Providers which we do not have, but we would like to have. Currently,
- some of these databases are supported via the ODBC or OLEDB providers.
+ some of these databases are supported via the ODBC or OLEDB providers.</li>
<ul>
- <li><a href="http://www-3.ibm.com/software/data/db2/">IBM DB2 Universal Database</a>
+ <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>dbase or xbase type database files</li>
<li>Others are welcome</li>
</ul>
- </ul>
+ </ul></li>
<br>
<li>Modify Pre-existing ADO.NET Providers to work with Mono. This may
require fixing or implementing areas of Mono too.
<ul>
<li><a href="http://www.go-mono.com/firebird.html">Firebird Interbase</a></li>
- <li><a href="http://gborg.postgresql.org/project/npgsql/projdisplay.php">Npgsql</a> is a PostgreSQL Managed data provider written
- in 100% C# and does not require a client library </li>
- <li><a href="http://sourceforge.net/projects/mysqlnet/">MySQLNet</a> is a MySQL Manager data provider written in 100% C# and does not
- require a client library</li>
- <li><a href="http://sourceforge.net/projects/mysqldrivercs/">MySQLDriverCS</a> is a MySQL data provider written in C#</li>
-
+ <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 Mono</li>
+ <li><a href="http://sourceforge.net/projects/mysqlnet/">MySQLNet</a> is a
+ MySQL Manager data provider written in 100% C#, does not
+ require a client library, and works on Mono</li>
</ul>
</li>
</ul>
test connection strings, and connect to various ADO.NET
providers in Mono. The SQL# CLI can be found in
mcs/tools/SqlSharp/SqlSharpCli.cs</li>
+
<li><p><b>SQL# GUI - a GUI tool</b> written in C# to
execute SQL commands.
Currently, there is SQL# For GTK# which
can be found at
mcs/tools/SqlSharp/gui/gtk-sharp
It has a SQL editor with
- syntax hi lighting of SQL keywords</li>
+ syntax hi lighting of SQL keywords. This will be
+ moving to its own cvs modeul sqlsharpgtk.</li>
+
<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
<p>Variouls ADO.NET Providers have been created: PostgreSQL, MySQL, Sybase, SQL Lite,
Microsoft SQL Server, OLE DB, ODBC, and TDS Generic. See their respective web page for
more information.
+
+ <p>Constraints need lots of work
+
+ <p>TypeDataSetGenerator needs to be stubbed and implemented.
<p><b>DataSet, DataAdaptor, DataTable, DataRelation, DataRow, DataColumn,
DataColumnCollection, DataRowCollection, and others</b> need more work. There are
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.
+ XML support in the ExecuteXmlReader() in a SqlCommand. Ville Palo has been
+ heavily modifying DataSet, XmlDataDocument, and other classes for reading
+ and writing XML.
<p><b>ADO.NET Provider Factory</b> has been started by Brian Ritchie. The
- Provider Factory is used to dynamically create
- connections, commands, parameters, and data adapters based on configuration information. This
- provider factory can also provide utility functions needed by a lot of
- providers but are not exposed via the provider.
+ Provider Factory is way to dynamically create
+ connections, commands, parameters, and data adapters based on configuration information. The
+ provider factory also provides utility functions needed by a lot of
+ providers but are not exposed via the provider. The ProviderFactory
+ is found at mcs/class/Mono.Data and includes a test named test.cs for it in
+ mcs/class/Mono.Data/Test. Also, take a look at the sample .config file for the
+ test.exe application named test.exe.config. The .config file is automatically
+ read when you use the Mono.Data.ProviderFactory or Mono.Data.DataTools.
<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>
+ in System.Web and System.Data. If you want to help,
+ contact Gonzalo Paniagua Javier. Here is information about using ADO.NET in ASP.NET:
+ <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
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>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
+
+ <li><a href="http://www.go-mono.com/testing.html">Testing non-connection classes</a> are
+ done via mono's modified version of NUnit.</li>
+
+</ul>
by Borland under the Interbase Public License</li>
<li>Both the Firebird Relational Database and the Firebird .NET Data Provider can be
- downloaded from <a href="http://sourceforge.net/projects/firebird/firebird">here</a></li>
+ downloaded from <a href="http://sourceforge.net/projects/firebird/">here</a></li>
<li>The Firebird .NET Data provider has been made
available by Carlos Guzmán Álvarez (aka "Carlos G.A."), who has also made a
</ul>
-* Current Status
+** Current Status
<ul>
<li>Currently, it is able to connect to Firebird and Interbase databases
</ul>
-* Action Plan
+** Action Plan
<ul>
<li>Bug fixing</li>\r
</li>
</ul>
+
+** Testing
+
+<ul>
+ <li>Need a working mono and mcs</li>
+ <li>Need access to a Firebird Relational Database or you can download
+ it from <a href="http://firebird.sourceforge.net">here</a></li>
+ <li>Get the Firebird .NET data provider from here as
+ <a href="http://lists.sourceforge.net/lists/listinfo/firebird-net-provider">firebird-net-provider</a>. Make
+ sure the Firebird .NET data provider binary assembly FirebirdSql.Data.Firebird.dll is
+ installed in the same place as the mono class libraries.</li>
+ <li>C# Example for Mono's System.Data.OleDb:
+<pre>
+ using System;
+ using System.Data;
+ using FirebirdSql.Data.Firebird;
+
+ public class Test
+ {
+ public static void Main(string[] args)
+ {
+ string connectionString = \r
+ "Database=C:\\PROGRAM FILES\\FIREBIRD\\EXAMPLES\\EMPLOYEE.GDB;" +\r
+ "User=SYSDBA;" +\r
+ "Password=masterkey;" +\r
+ "Dialect=3;" +\r
+ "Server=localhost";\r
+ IDbConnection dbcon = new FbConnection(connectionString);
+ IDbCommand dbcmd = dbcon.CreateCommand();
+ string sql = "SELECT * FROM employee";
+ dbcmd.ConnectionString = sql;
+ IDataReader reader = dbcmd.ExecuteReader();
+ while(reader.Read()) {
+ object dataValue = myReader.GetValue(0);
+ string sValue = dataValue.ToString();
+ Console.WriteLine("Value: " + sValue);
+ }
+ // clean up
+ reader.Close();
+ reader = null;
+ dbcmd.Dispose();
+ dbcmd = null;
+ dbcon.Close();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs -r System.Data.dll \
+ -r FirebirdSql.Data.Firebird.dll
+</pre>
+ </li>
+ <li>Build on Windows via Cygwin:
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ TestExample.cs \
+ -lib:C:/cygwin/home/MyHome/mono/install/lib \
+ -r System.Data.dll -r FirebirdSql.Data.Firebird.dll
+</pre>
+ </li>
+ </ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
+</pre>
+</li>
+
+</ul>
+
<a href="http://gtk-sharp.sourceforge.net">Gtk#</a> (Gtk
sharp) is a set of C# language bindings for the
<a href="http://www.gtk.org">Gtk+</a> toolkit and other
- libraries that are part of the <a
- href="http://www.gnome.org">GNOME</a> platform .
+ libraries that are part of the
+ <a href="http://www.gnome.org">GNOME</a> platform .
** API of Gtk#
The API is browsable
- <a
- href="http://primates.ximian.com/~tvgm/gtk-sharp-docs/">here</a>
+ <a href="http://primates.ximian.com/~tvgm/gtk-sharp-docs/">here</a>
** Where to learn more.
- Visit the official site for the <a
- href="http://gtk-sharp.sourceforge.net">Gtk# Project</a>.
+ Visit the official site for the <a href="http://gtk-sharp.sourceforge.net">Gtk# Project</a>.
The <a href="http://www.go-mono.org/faq">Mono FAQ</a> has some useful
information too.
+
+** GTK# On Linux
+<p>Where to get distributions of GTK# for Linux: TODO
+
+<p>Buidling on Linux:
+
+<ul>
+ <li>Get GTK# source from <a href="http://gtk-sharp.sourceforge.net">Gtk# Project</a>.</li>
+ <li>run ./autogen.sh --prefix=my_mono_installation_prefix</li>
+ <li>make</li>
+ <li>make install</li>
+</ul>
+
+** GTK# On Windows
+
+<p>There is a Windows Installer for GTK# <a href="http://www.sport-huettn.de/mono/gtk-sharp-0.6-stable-2.exe">here</a>.\r
+
+<p>If you want to build GTK# yourself on Windows:\r
+\r
+<p>To build gtk# under windows, you will need the following:\r
+\r
+<ul>\r
+ <li>cygwin from <a href="http://www.cygwin.com/">here</a> When installing Cygwin via setup.exe, \r
+ by default binutils and other tools do not get installed; you have to make \r
+ sure to select these items. Just make\r
+ sure Base and Development are set to Install.</li>\r
+ <li>Mono 0.17 or later from <a href="http://www.go-mono.com/download.html">here</a>\r
+ You can use Windows Setup Wizard (NT/2000/XP).</li>\r
+ <li>GTK+ 2.0 (and dependencies). You can obtain gtk+ 2.0 by either of the\r
+following:\r
+ <ul>\r
+ <li>You can get a Windows Installer at:\r
+ <a href="http://www.dropline.net/jade/download.html">here</a> </li>\r
+ <li>or get the separate binary and dev/lib packages at\r
+ at <a href="http://www.gimp.org/~tml/gimp/win32/downloads.html">here</a> </li>\r
+ <li>or binary package from Dev-C++ site <a href="http://www.bloodshed.net/dev/packages/gtk.html">here</a> </li>\r
+ <li>or get Gtk4Win <a href="http://wingtk.sourceforge.net/index.html">here</a> </li>\r
+ <li>or the source at <a href="http://www.gtk.org/">here</a> </li>\r
+ </ul>\r
+ </li>\r
+ <li>binary distriubtion of a current web browser\r
+ like Internet Explorer 4.0, Mozilla 1.0, or Netscape 7.0 which\r
+ includes things like msvcrt.dll.</li>\r
+ <li>Microsoft .NET Framework at\r
+ <a href="http://msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?url=/msdn-files/027/000/976/msdncompositedoc.xml&frame=true">here</a> </li>\r
+\r
+<p>If you are running Windows 95/98/ME, then you will need Unicode support.\r
+Look in\r
+mono-list archives for information about how to get\r
+Mono to work on Windows 9x.\r
+<a href="http://lists.ximian.com/archives/public/mono-list/2002-December/004158.html">here</a>\r
+\r
+<p>Environment Variables to set:\r
+<ul>\r
+<li>PATH - set to your mono installation bin and lib path.\r
+ For example, my mono installation prefix is:\r
+<pre>\r
+F:/cygwin/home/DanielMorgan/mono/install\r
+</pre>\r
+ <p>So, I would set my PATH in the Windows Control Panel as:\r
+<pre>\r
+F:/cygwin/home/DanielMorgan/mono/install/bin;F:/cygwin/home/DanielMorgan/mono/install/lib</li>\r
+</pre>\r
+</li>\r
+<li>LD_LIBRARY_PATH - set to your mono installation lib path</li>\r
+<li>PKG_CONFIG_PATH - set to your mono installation lib/pkgconfig path, such\r
+ as,\r
+<pre>\r
+ F:/cygwin/home/DanielMorgan/mono/install/lib/pkgconfig</li>\r
+</pre>\r
+\r
+ <p>If you got the gtk-sharp source, cd to the gtk-sharp directory, type:\r
+<pre>\r
+ ./autogen.sh --prefix=~/mono/install\r
+</pre>\r
+\r
+ <p>Set your --prefix= to whatever your mono installation prefix is located.\r
+ This will take awhile to go through the ./autogen.sh and ./configure...\r
+\r
+ <p>After that it finishes succesfully, you run make with the makefile.win32\r
+ like:\r
+<pre>\r
+ make -f makefile.win32\r
+</pre>\r
+\r
+ <p>After that finishes succesfully, you can copy to your mono installation lib\r
+ path like:\r
+<pre>\r
+ cp */*.dll ~/mono/install/lib\r
+</pre>\r
+</ul>\r
+\r
+<p>The pkg-config files for\r
+gtk+ 2.0 and dependencies will need to be set correctly if they haven't\r
+already been.\r
+\r
+<p>Look in your mono installation/lib/pkgconfig, such as,\r
+<pre>\r
+F:/cygwin/home/DanielMorgan/mono/install/lib/pkgconfig\r
+</pre>\r
+\r
+<p>You will find files like: gtk+-2.0.pc\r
+\r
+<p>Edit the line that says\r
+\r
+<pre>\r
+ prefix=something\r
+</pre>\r
+\r
+<p>And set it to your mono installation prefix, such as,\r
+\r
+<pre>\r
+ prefix=F:/cygwin/home/DanielMorgan/mono/install\r
+</pre>\r
+\r
+<p>Do this for all the .pc files in that directory. If there are not any, then\r
+you will need to create them. Or get them from somewhere like the dev\r
+packages at\r
+<a href="http://www.gimp.org/~tml/gimp/win32/downloads.html">here</a>\r
+\r
+\r
+** GTK# On Solaris\r
+\r
+ TODO\r
+\r
+** GTK# On AIX\r
+\r
+ TODO\r
--- /dev/null
+* IBM DB2 Data Provider
+<ul>
+ <li>Exists in namespace DB2ClientCS and assembly Mono.Data.DB2Client</li>
+
+ <li>The source code exists at mcs/class/Mono.Data.DB2Client</li>
+
+ <li>Requires the Call Level Interface to IBM DB2 shared library. This
+ is db2cli.dll on Windows. The IBM DB2 CLI API is very similar to the ODBC API. If
+ you take a look at Mono's System.Data.Odbc ODBC provider, you will see the
+ DllImport's have similiar function names.</li>
+
+ <li><a href="http://www-3.ibm.com/software/data/db2/">IBM DB2 Universal Database</a> can be downloaded from IBM.</li>
+
+ <li>IBM DB2 Provider created by Christopher Bockner.</li>
+</ul>
+
+** Current Status
+
+<ul>
+ <li>Compiles on Windows and Linux. Works on Windows. Still needs to be tested on Linux.</li>
+
+ <li>Able to connect to IBM DB2</li>
+
+ <li>Able to execute DML, such as, CREATE TABLE via ExecuteNonQuery()</li>
+
+</ul>
+
+** Action Plan
+
+<ul>
+ <li>Still needs work to get it to retrieve data via ExecuteReader() and
+ use the data reader to read data.</li>
+
+</ul>
+
+** Testing
+
+In order to test.
+<ul>
+ <li>Have working mono and mcs setup</li>
+
+ <li>Have access to an IBM DB2 database. If you do not have access, download the
+ <a href="http://www-3.ibm.com/software/data/db2/">IBM DB2</a> software. There
+ are versions for Windows, Linux, AIX, and Sun Solaris.</li>
+
+ <li>Make sure the assembly Mono.Data.DB2Client.dll was built and installed
+ where the other class libraries are installed.</li>
+
+ <li>If you do not have the source to mcs, get the source from
+ <a href="http://www.go-mono.com/download">here</a></li>
+
+ <li>In mcs/class/Mono.Data.DB2Client/Test/DBConnTest, you will find
+ a DBConnTest.cs.</li>
+
+ <li>To build DBConnTest:
+ <ul>
+ <li>On Unix:</li>
+<pre>
+mcs DBConnTest.cs -r System.Data.dll -r Mono.Data.DB2Client.dll
+</pre>
+ </li>
+ <li>On Windows via Cygwin:
+<pre>
+mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe DBConnTest.cs \
+ -lib:C:/cygwin/home/MyHome/mono/install/lib \
+ -r System.Data.dll -r Mono.Data.DB2Client.dll
+</pre>
+ </li>
+ <li>To run it on mono:
+<pre>
+mono DBConnTest.exe database userid password
+</pre>
+ </li>
+ </ul>
+ </li>
+
+ <li>C# Example:
+<pre>
+ using System;
+ using System.Data;
+ using Mono.Data.DB2Client;
+
+ public class Test
+ {
+ public static void Main(string[] args)
+ {
+ string connectionString =
+ "DSN=sample;UID=db2admin;PWD=mypass";
+ IDbConnection dbcon = new DB2ClientConnection(connectionString);
+ IDbCommand dbcmd = dbcon.CreateCommand();
+ string sql =
+ "CREATE TABLE mono_db2_test1 ( " +\r
+ " testid varchar(2), " +\r
+ " testdesc varchar(16) " +\r
+ ")";
+ dbcmd.ConnectionString = sql;
+ dbcmd.ExecuteNonQuery();
+ dbcmd.Dispose();
+ dbcmd = null;
+ dbcon.Close();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs -r System.Data.dll \
+ -r Mono.Data.DB2Client.dll
+</pre>
+ </li>
+ <li>Build on Windows via Cygwin:
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ TestExample.cs \
+ -lib:C:/cygwin/home/MyHome/mono/install/lib \
+ -r System.Data.dll -r Mono.Data.DB2Client.dll
+</pre>
+ </li>
+ </ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
+</pre>
+ </li>
+
+</ul>
+
<ul>
<li>MySQL Data Provider for
<a href="http://www.mysql.com/">MySQL</a> databases. It is written in C# and uses
- the MySQL C Client Library
+ the MySQL C Client Library</li>
- <li>Exists in namespace Mono.Data.MySql and assembly Mono.Data.MySql
+ <li>Exists in namespace Mono.Data.MySql and assembly Mono.Data.MySql</li>
<li>Works on Windows and Linux via the MySQL client shared library
- (libmySQL.dll on Windows and libmysqlclient.so on Linux).
+ (libmySQL.dll on Windows and libmysqlclient.so on Linux).</li>
- <li>Started by Daniel Morgan using C# Bindings to MySQL from Brad Meril.
+ <li>Started by Daniel Morgan using
+ <a href="http://www.cybercom.net/~zbrad/DotNet/MySql/">C# Bindings to MySQL</a> from <a href="mailto:zbrad@cybercom.net">Brad Merill</a>
<li><a href="http://www.mysql.com/articles/dotnet/">Exploring MySQL in the Microsoft .NET Environment</a> is an article
- by Mr. Venu who is a MySQL AB developer.
+ by Mr. Venu who is a MySQL AB developer.</li>
- <li>Other projects which have created a .NET Data provider for MySQL in C#
+ <li>There is a good alternative to the provider in Mono:
<ul>
- <li><a href="http://sourceforge.net/projects/mysqldrivercs/">MySQLDriverCS</a> is a MySQL provider written in C#
- <li><a href="http://sourceforge.net/projects/mysqlnet/">MySQLNet</a> is a MySQL Manager provider written in C#
+ <li><a href="http://sourceforge.net/projects/mysqlnet/">MySQLNet</a> from ByteFX
+ is a MySQL Managed provider written in 100% C#,
+ does not require a client library, and works on Microsoft .NET and Mono. You
+ need at least Mono 0.18 and MySQLNet 0.65 for it to work on Mono.</li>
</ul>
+ </li>
+ <li>Testing for Mono's Mono.Data.MySql and ByteFX's ByteFX.Data.MySQLClient is below...</li>
</ul>
-* Current Status
+** Current Status
<ul>
<li>can connect
can be modified with a text editor.
</ul>
-* Action plan
+** Action plan
The current plan to work on the MySQL data provider:
<li>Get the provider to work like other data providers
</ul>
+
+** Testing for Mono's MySQL provider (Mono.Data.MySql)
+
+<ul>
+ <li>Have access to a MySQL database or download it from
+ <ul>
+ <li><a href="http://www.mysql.com/downloads/index.html">MySQL AB</a></li>
+ </ul>
+ </li>
+
+ <li>Take a look at MySqlTest.cs in mcs/class/Mono.Data.MySql/Test</li>
+
+ <li>Has a ConnectionString format:
+<pre>
+ "Server=hostname;" +
+ "Database=database;" +
+ "User ID=username;" +
+ "Password=password"
+ (or)
+ "host=hostname;" +
+ "dbname=database;" +
+ "user=username;" +
+ "passwd=password"
+</pre>
+
+ <li>C# Example:
+<pre>
+ using System;
+ using System.Data;
+ using Mono.Data.MySql;
+
+ public class Test
+ {
+ public static void Main(string[] args)
+ {
+ string connectionString =
+ "Server=localhost;" +
+ "Database=test;" +
+ "User ID=mysql;" +
+ "Password=;";
+ IDbConnection dbcon;
+ dbcon = new MySqlConnection(connectionString);
+ IDbCommand dbcmd = dbcon.CreateCommand();
+ // requires a table to be created named employee
+ // with columns firstname and lastname
+ // such as,
+ // CREATE TABLE employee (
+ // firstname varchar(32),
+ // lastname varchar(32));
+ string sql =
+ "SELECT firstname, lastname " +
+ "FROM employee";
+ dbcmd.ConnectionString = sql;
+ IDataReader reader = dbcmd.ExecuteReader();
+ while(reader.Read()) {
+ string FirstName = reader["firstname"];
+ string LastName = reader["lastname"];
+ Console.WriteLine("Name: " +
+ FirstName + " " + LastName);
+ }
+ // clean up
+ reader.Close();
+ reader = null;
+ dbcmd.Dispose();
+ dbcmd = null;
+ dbcon.Close();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs \
+ -r System.Data.dll \
+ -r Mono.Data.MySql.dll
+</pre>
+ </li>
+ <li>Build on Windows via Cygwin:
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ TestExample.cs \
+ -lib:C:/cygwin/home/MyHome/mono/install/lib \
+ -r System.Data.dll \
+ -r Mono.Data.MySql.dll
+</pre>
+ </li>
+ </ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
+</pre>
+ </li>
+
+</ul>
+
+** Testing for MySQLNet provider (ByteFX.Data.MySQLClient)
+
+<ul>
+ <li>Have access to a MySQL database or download it from
+ <ul>
+ <li><a href="http://www.mysql.com/downloads/index.html">MySQL AB</a></li>
+ </ul>
+ </li>
+
+ <li>MySQLNet can be gotten from <a href="http://sourceforge.net/projects/mysqlnet/">here</a> and the
+ binary assembly ByteFX.Data.dll needs to be installed
+ in the same place as the mono class libraries.</li>
+
+ <li>MySQLNet requires <a href="http://www.icsharpcode.net/OpenSource/SharpZipLib/default.asp">SharpZipLib</a> which is
+ a Zip Library written in 100% C#. This is used for compression/decompression of data
+ sent/received over the network. The SharpZipLib binary assembly SharpZipLib.dll should
+ be installed in the same place as the mono class libraries.</li>
+
+ <li>Has a ConnectionString format:
+<pre>
+"Server=hostname;" +
+"Database=database;" +
+"User ID=username;" +
+"Password=password"
+</pre>
+ </li>
+ <li>C# Example:
+<pre>
+ using System;
+ using System.Data;
+ using ByteFX.Data.MySQLClient;
+
+ public class Test
+ {
+ public static void Main(string[] args)
+ {
+ string connectionString =
+ "Server=localhost;" +
+ "Database=test;" +
+ "User ID=mysql;" +
+ "Password=;";
+ IDbConnection dbcon;
+ dbcon = new MySQLConnection(connectionString);
+ IDbCommand dbcmd = dbcon.CreateCommand();
+ // requires a table to be created named employee
+ // with columns firstname and lastname
+ // such as,
+ // CREATE TABLE employee (
+ // firstname varchar(32),
+ // lastname varchar(32));
+ string sql =
+ "SELECT firstname, lastname " +
+ "FROM employee";
+ dbcmd.ConnectionString = sql;
+ IDataReader reader = dbcmd.ExecuteReader();
+ while(reader.Read()) {
+ string FirstName = reader["firstname"];
+ string LastName = reader["lastname"];
+ Console.WriteLine("Name: " +
+ FirstName + " " + LastName);
+ }
+ // clean up
+ reader.Close();
+ reader = null;
+ dbcmd.Dispose();
+ dbcmd = null;
+ dbcon.Close();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs -r System.Data.dll \
+ -r ByteFX.Data.dll
+</pre>
+ </li>
+ <li>Build on Windows via Cygwin:
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ TestExample.cs \
+ -lib:C:/cygwin/home/MyHome/mono/install/lib \
+ -r System.Data.dll -r ByteFX.Data.dll
+</pre>
+ </li>
+ </ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
+</pre>
+ </li>
+
+</ul>
+
<ul>
<li>Exists in namespace System.Data.Odbc and assembly System.Data
- <li>Works on Windows and Linux
+ <li>Works on Windows and Linux. Should have no problems working on UNIX too.
<li>Works on Windows via the native Windows odbc32.dll
- <li>Works on Linux via <a href="http://www.unixodbc.org/">unixODBC</a>
+ <li>Works on Linux via:
- <li>List of unixODBC <a href="http://www.unixodbc.org/drivers.html">drivers</a> and
- an alternative list
+ <ul>
+ <li><a href="http://www.unixodbc.org/">unixODBC</a> which has
+ commercial support
+ from <a href="http://www.easysoft.com/">Easysoft</a></li>
+
+ <li><a href="http://www.iodbc.org/">iODBC</a> which has
+ a commercial support
+ from <a href="http://oplweb.openlinksw.com:8080/download/">OpenLink Software</a></li>
+ </ul>
- <li>An alternative to unixODBC, but not tested with this
- provider is <a href="http://www.iodbc.org">iODBC</a>
-
- <li>Another alternative to unixODBC, but not tested this provider is
- <a href="http://oplweb.openlinksw.com:8080/download/">OpenLink's</a>.
+ <li>List of unixODBC <a href="http://www.unixodbc.org/drivers.html">drivers</a>
<li>List of <a href="http://ourworld.compuserve.com/homepages/Ken_North/odbcvend.htm">ODBC Vendors</a>
+
+ <li>ODBC can connect to various databases which has an ODBC driver installed:
+ <ul>
+ <li><a href="http://www.mysql.com/">MySQL</a>
+ <li><a href="http://www.postgresql.org/">PostgreSQL</a>
+ <li><a href="http://www.oracle.com/">Oracle</a>
+ <li><a href="http://www.borland.com/products/downloads/download_interbase.html">Interbase</a>
+ <li><a href="http://www.sybase.com/downloads">Sybase</a> and
+ <li><a href="http://www.microsoft.com/sql/default.asp">Microsoft SQL Server</a> (
+ via <a href="http://www.freetds.org/">FreeTDS</a> on UNIX)
+ <li><a href="http://www-3.ibm.com/software/data/db2/">IBM DB2 Universal Database</a>
+ <li><a href="http://www.microsoft.com/office/access/default.asp">MS Access</a>
+ (via <a href="http://mdbtools.sourceforge.net/">MDB Tools</a> on UNIX)
+ </ul>
- <li>ODBC Provider created by Brian Ritchie.
+ <li>ODBC Provider created by Brian Ritchie.</li>
+
+ <li>Does not support trusted connections</li>
</ul>
-* Current Status
+** Current Status
<ul>
- <li>Connect on Windows via native Windows odbc32.dll
-
- <li>Connect on Linux via unixODBC's libodbc.so
+ <li>Can Connect on:
+ <ul>
+ <li>Windows via native Windows odbc32.dll</a></li>
+ <li>Linux via:
+ <ul>
+ <li>unixODBC's libodbc.so</li>
+ <li>iODBC's libiodbc.so</li>
+ </ul>
+ </li>
+ </ul>
+ </li>
<li>Various databases have been tested using their
- ODBC drivers: MySQL, Oracle, IBM DB2, and Microsoft SQL Server
+ ODBC drivers: MySQL, PostgreSQL, Oracle, IBM DB2, and Microsoft SQL Server</li>
- <li>Can execute non-query commands via ExecuteNonQuery of a OdbcCommand
+ <li>Can execute non-query commands via ExecuteNonQuery of a OdbcCommand</li>
<li>Can execute aggreates and retrieve a single row single column result via
- ExecuteScalar of a OdbcCommand
+ ExecuteScalar of a OdbcCommand</li>
<li>Can execute queries via ExecuteReader of a OdbcCommand and
- retrieve results using an OdbcDataReader.
+ retrieve results using an OdbcDataReader</li>
+
+ <li>Can get a DataTable containing schema info via GetSchemaTable() in a OdbcDataReader</li>
- <li>Can get a DataTable containing schema info via GetSchemaTable() in a OdbcDataReader
+ <li>Can Fill a DataTable in a DataSet via an OdbcDataAdapter</li>
</ul>
-* Action Plan
+** Action Plan
<ul>
- <li>Create a Data Adapter to Fill data into a DataTable in a DataSet
- <li>TODO
+ <li>Fixing bugs
+
+ <li>Testing with other setups
+</ul>
+
+** Testing ODBC provider
+
+<p>Test Mono's ODBC provider System.Data.Odbc with the MySQL ODBC driver MyODBC
+
+<p><ul>
+ <li>Take a look at OdbcTest.cs in mcs/class/System.Data/Test</li>
+
+ <li>Here is a ConnectionString format if you have a DSN setup:
+<pre>
+"DSN=dataSetName;UID=username;PWD=password"
+</pre>
+ </li>
+ <li>Here is a ConnectionString format if you do not have DSN (have not
+ gotten this to work):
+<pre>
+"DRIVER={SQL Server};SERVER=(local);UID=sa;PWD=;DATABASE=pubs"
+</pre>
+ </li>
+ <li>C# Example:
+<pre>
+ using System;
+ using System.Data;
+ using System.Data.Odbc;
+
+ public class Test
+ {
+ public static void Main(string[] args)
+ {
+ // have an ODBC DSN setup named MYSQLDSN
+ // that accesses a MySQL database via
+ // MyODBC driver for ODBC with a
+ // hostname of localhost and database test
+ string connectionString =
+ "DSN=MYSQLDSN;" +
+ "UID=mysql;" +
+ "PWD=;";
+ IDbConnection dbcon;
+ dbcon = new OdbcConnection(connectionString);
+ IDbCommand dbcmd = dbcon.CreateCommand();
+ // requires a table to be created named employee
+ // with columns firstname and lastname
+ // such as,
+ // CREATE TABLE employee (
+ // firstname varchar(32),
+ // lastname varchar(32));
+ string sql =
+ "SELECT firstname, lastname " +
+ "FROM employee";
+ dbcmd.ConnectionString = sql;
+ IDataReader reader = dbcmd.ExecuteReader();
+ while(reader.Read()) {
+ string FirstName = reader["firstname"];
+ string LastName = reader["lastname"];
+ Console.WriteLine("Name: " +
+ FirstName + " " + LastName);
+ }
+ // clean up
+ reader.Close();
+ reader = null;
+ dbcmd.Dispose();
+ dbcmd = null;
+ dbcon.Close();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs -r System.Data.dll
+</pre>
+ </li>
+ <li>Build on Windows via Cygwin:
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ TestExample.cs \
+ -lib:C:/cygwin/home/MyHome/mono/install/lib \
+ -r System.Data.dll
+</pre>
+ </li>
+ </ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
+</pre>
+ </li>
+
</ul>
* OLE DB Provider
+
<ul>
<li> Provides a OleDb-like provider for Mono
- using <a href="http://www.gnome-db.org/">GDA</a> as the data access layer.
+ using <a href="http://www.gnome-db.org/">GDA</a> as the data access layer.</li>
- <li> Exists in namespace System.Data.OleDb and assembly System.Data
+ <li> Exists in namespace System.Data.OleDb and assembly System.Data</li>
- <li>Created by Rodrigo Moya
+ <li>Created by Rodrigo Moya</li>
- <li>LibGDA has providers for:
+ <li>LibGDA has providers for:</li>
<ul>
- <li><a href="http://www.mysql.com/">MySQL</a>
- <li><a href="http://www.postgresql.org/">PostgreSQL</a>
- <li>XML
- <li>ODBC (via <a href="http://www.unixodbc.org/">unixODBC</a>)
- <li><a href="http://www.oracle.com/">Oracle</a>
- <li><a href="http://www.borland.com/products/downloads/download_interbase.html">Interbase</a>
+ <li><a href="http://www.mysql.com/">MySQL</a></li>
+ <li><a href="http://www.postgresql.org/">PostgreSQL</a></li>
+ <li>XML</li>
+ <li>ODBC (via <a href="http://www.unixodbc.org/">unixODBC</a>)</li>
+ <li><a href="http://www.oracle.com/">Oracle</a></li>
+ <li><a href="http://www.borland.com/products/downloads/download_interbase.html">Interbase</a></li>
<li><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>)
- <li><a href="http://www-3.ibm.com/software/data/db2/">IBM DB2 Universal Database</a>
- <li><a href="http://www.hwaci.com/sw/sqlite/download.html">SQL Lite</a>
- <li><a href="http://www.microsoft.com/office/access/default.asp">MS Access</a>
- (via <a href="http://mdbtools.sourceforge.net/">MDB Tools</a>)
+ via <a href="http://www.freetds.org/">FreeTDS</a>)</li>
+ <li><a href="http://www-3.ibm.com/software/data/db2/">IBM DB2 Universal Database</a></li>
+ <li><a href="http://www.hwaci.com/sw/sqlite/download.html">SQL Lite</a></li>
+ <li><a href="http://www.microsoft.com/office/access/default.asp">MS Access</a></li>
+ (via <a href="http://mdbtools.sourceforge.net/">MDB Tools</a>)</li>
</ul>
+ </li>
+
+ <li>Does not support trusted connections</li>
</ul>
-* Current Status
+** Current Status
<ul>
<li>The OleDb provider 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.
+ PostgreSQL database via libgda via the C-Sharp bindings to libgda.</li>
<li>Basic
functionality (execution of commands, data retrieval, transactions, etc) are
- now working.
+ now working.</li>
<li>An inital implementation of GetSchemaTable() for
the OleDbDataReader has been checked into cvs. GetSchemaTable() isn't correct for OleDb,
- but the foundation is there.
+ but the foundation is there.</li>
</ul>
-* Action Plan
+** Action Plan
<ul>
<li>Current focus is on filling up the missing pieces (Data adapters
- mainly) and schema support.
+ mainly) and schema support.</li>
<li>We need help building libgda on Windows though. libgda
- builds find on linux though.
+ builds find on linux though.</li>
+
+ <li>Need to make the OleDb provider compatible with the OleDb provider in Microsoft .NET</li>
+ </ul>
+
+** Testing OleDb with libgda's PostgreSQL provider
- <li>Need to make the OleDb provider compatible with the OleDb provider in Microsoft .NET
+<ul>
+ <li>Requires a working mono and mcs</li>
+ <li>Requires Linux because the OleDb provider uses libgda and libgda only
+ works on Linux.</li>
+ <li>Connection String format: "Provider=providerName;...". providerName is the
+ name of the Provider you use, such as, PostgreSQL, MySQL, etc. The elipsis ...
+ means that the connection parameters are dependent upon the provider being used and
+ are passed to libgda for connecting. Such paramters, can be: Database, User ID, Password,
+ Server, etc...</li>
+ <li>See the test TestOleDb.cs found at mcs/class/System.Data/System.Data.OleDb</li>
+ <li>C# Example for Mono's System.Data.OleDb:
+<pre>
+ using System;
+ using System.Data;
+ using System.Data.OleDb;
+
+ public class Test
+ {
+ public static void Main(string[] args)
+ {
+ // there is a libgda PostgreSQL provider
+ string connectionString =
+ "Provider=PostgreSQL;" +
+ "Addr=127.0.0.1;" +
+ "Database=rodrigo";
+ IDbConnection dbcon;
+ dbcon = new OleDbConnection(connectionString);
+ IDbCommand dbcmd = dbcon.CreateCommand();
+ // requires a table to be created named employee
+ // with columns firstname and lastname
+ // such as,
+ // CREATE TABLE employee (
+ // firstname varchar(32),
+ // lastname varchar(32));
+ string sql =
+ "SELECT firstname, lastname " +
+ "FROM employee";
+ dbcmd.ConnectionString = sql;
+ IDataReader reader = dbcmd.ExecuteReader();
+ while(reader.Read()) {
+ string FirstName = reader["firstname"];
+ string LastName = reader["lastname"];
+ Console.WriteLine("Name: " +
+ FirstName + " " + LastName);
+ }
+ // clean up
+ reader.Close();
+ reader = null;
+ dbcmd.Dispose();
+ dbcmd = null;
+ dbcon.Close();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs -r System.Data.dll
+</pre>
+ </li>
+ <li>Build on Windows via Cygwin:
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ TestExample.cs \
+ -lib:C:/cygwin/home/MyHome/mono/install/lib \
+ -r System.Data.dll
+</pre>
+ </li>
</ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
+</pre>
+</li>
+
+</ul>
+
* Oracle Data Provider
+
<ul>
<li>Exists in namespace System.Data.OracleClient and assembly System.Data.OracleClient</li>
<li>Works with Oracle 8i</li>
<li>More information about Oracle can be found at <a href="http://www.oracle.com/"/>here</a></li>
+
+ <li>Created by Daniel Morgan.</li>
+
+ <li>Does not support trusted connections</li>
</ul>
-* Current Status
+** Current Status
<ul>
<li>OracleConnection can connect to an Oracle 8i database on
</ul>
-* Action Plan
+** Action Plan
<ul>
<li>Get the makefile for the Borland C++ compiler to work
Marshalling in C# to the oci shared library (oci.dll on Windows)</li>
</ul>
+
+** Testing Mono.Data.OracleClient
+
+<ul>
+ <li>Have a working mono and mcs</li>
+
+ <li>Have access to an Oracle 8i database or download it from
+ <a href="http://www.oracle.com/">Oracle</a>. Registration to the
+ Oracle Technology Network is free. If installing on Linux, I suggest you
+ do a lot of searching to see how others installed Oracle on Linux.</li>
+
+ <li>Make sure Mono.Data.OracleClient.dll assembly is built, if not, go
+ into Mono.Data.OracleClient and do a make -f makefile.gnu (on Linux) or
+ ../../nant/NAnt.exe (on Cygwin).</li>
+
+ <li>The OCI Glue Library Mono.Data.OracleClient.ociglue.dll will need to be
+ created as well. Has only been tested with lc (Microsoft Visual C++ command-line compiler).
+ There is a make file for Microsoft C++ and Borland C++. I'm sure it wouldn't be hard
+ to create a makefile for gcc if installing on Linux.</li>
+
+ <li>Take a look at TestOracleClient.cs found at mcs/class/System.Data.OracleClient/Test</li>
+
+ <li>Has a connection string format:
+<pre>
+"Data Source=tnsname;User ID=userid;Password=password"
+</pre>
+ </li>
+ <li>C# Example:
+<pre>
+ using System;
+ using System.Data;
+ using System.Data.OracleClient;
+
+ public class Test
+ {
+ public static void Main(string[] args)
+ {
+ string connectionString =
+ "Data Source=testdb;" +
+ "User ID=scott;" +
+ "Password=tiger;";
+ IDbConnection dbcon;
+ dbcon = new OracleConnection(connectionString);
+ IDbCommand dbcmd = dbcon.CreateCommand();
+ string sql =
+ "insert into scott.emp " +
+ "(empno, ename, job, sal, deptno) " +
+ "values(123," +
+ "'Don Smith'," +
+ "'Cook'," +
+ "23021," +
+ "20)";
+ dbcmd.ConnectionString = sql;
+ dbcmd.ExecuteNonQuery();
+ dbcmd.Dispose();
+ dbcmd = null;
+ dbcon.Close();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs -r System.Data.dll \
+ -r System.Data.OracleClient.dll
+</pre>
+ </li>
+ <li>Build on Windows via Cygwin:
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ TestExample.cs \
+ -lib:C:/cygwin/home/MyHome/mono/install/lib \
+ -r System.Data.dll -r System.Data.OracleClient.dll
+</pre>
+ </li>
+ </ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
+</pre>
+ </li>
+
+</ul>
+
* PostgreSQL Data Provider
<ul>
- <li>Exists in namespace Mono.Data.PostgreSql and assembly Mono.Data.PostgreSql
+ <li>Exists in namespace Mono.Data.PostgreSql and assembly Mono.Data.PostgreSql</li>
<li>Is a Mono Data Provider for the <a href="http://www.postgresql.org/">PostgreSQL</a>
- client/server database management system.
+ client/server database management system.</li>
<li>Written in C# and has C# bindings to the PostgreSQL C Client library pq.dll on Windows
- and libpq.so on Linux.
+ and libpq.so on Linux.</li>
+
+ <li>Alternative to the PostgreSQL provider in Mono:
+ <ul>
+ <li><a href="http://gborg.postgresql.org/project/npgsql/projdisplay.php">Npgsql</a>
+ is a Managed PostgreSQL provider written in 100% C#, does not require a client library,
+ and works on Microsoft .NET and Mono.
+ </li>
+ </ul>
+ </li>
+
+ <li>See Testing for both Mono's Mono.Data.PostgreSqlClient and Npgsql.</li>
</ul>
-* Current Status
+** Current Status
<ul>
<li>We are able to do simple CREATE TABLE, DROP TABLE, UPDATE, INSERT, and
See the test mcs/class/System.Data/Test/TestSqlDataAdapter.cs to see it in action.
</ul>
-* Testing the PostgreSQL Provider
+** Action Plan
+
+ <p>More testing and fixing bugs...
+
+ <p>Eventually replace the PostgreSQL data provider in Mono
+ with <a href="http://gborg.postgresql.org/project/npgsql/projdisplay.php">Npgsql</a>.
+ Npgsql is a .Net Data Provider for PostgreSQL which implements
+ the <a href="http://developer.postgresql.org/docs/postgres/protocol.html">PostgreSQL Frontend/Backend Protocol</a>.
+ Npgsql is implemented in 100% C#. This provider was created by Francisco Figueiredo jr.
+ and has many programmers developing the provider.
+
+** Testing Mono's Mono.Data.PostgreSqlClient
<ul>
* <p>In order to test Mono.Data.PostgreSqlClient, you will need to have
access to a remote PostgreSQL DBMS, or you will have to install
- one locally. PostgreSQL was first ADO.NET provider created in Mono.
+ one locally. PostgreSQL was the first ADO.NET provider created in Mono.
<p>Why use PostgreSQL? Because it is free software, has a client
library that is easy to use, PostgreSQL is easy to install on
user "postgres".
<pre>
-"host=localhost;dbname=test;user=postgres"
+"Server=localhost;Database=test;User ID=postgres;Password=fun2db"
+ (or)
+"host=localhost;dbname=test;user=postgres;password=fun2db"
</pre>
</ul>
* <p>Important notes from this file are:
<ul>
- <p><b>2.</b> - Install the latest <a href="http://www.neuro.gatech.edu/users/cwilson/cygutils/OBSOLETE/V1.1/cygipc/index.html">CygIPC</a> package.
+ <p><b>2.</b> - Install the latest <a href="http://www.neuro.gatech.edu/users/cwilson/cygutils/cygipc/index.html">CygIPC</a> package.
+ Cygwin includes a utility bunzip2 which can be used to unzip it. Now, change to
+ the root directory by
+ typing "cd /" then
+ you can use "tar xvf cygipc.xxx.tar" to untar it
+ in the root directory in cygwin.
- <p>The cygipc package contains the ipc-daemon you will need
+ <p>The cygipc package contains the support to run ipc-daemon
+ that you will need
to run before you can
run the PostgreSQL DBMS Server daemon (postmaster) or run
initdb which initializes the PostgreSQL database.
</ul>
<p>In the path mcs/class/System.Data/Test
- there is a PostgreSQL test program named
+ there is a test for Mono.Data.PostgreSqlClient named
PostgreTest.cs. Thanks goes to Gonzalo for creating the original
PostgreSQL test.
-
- <p>To use it to test System.Data, you
- modify the file to your PostgreSQL database
- connection requirements:
-
- <p>
- <ul>
- <li><b>dbname</b> database, ie., test</li>
- <li><b>host</b> hostname of the PostgreSQL DBMS Server, ie., localhost</li>
- <li><b>user</b> username, ie., someuser</li>
- <li><b>password</b> password, ie., mypass1234</li>
- </ul>
-
- <p>The connection string is in OLE-DB connection string format. Internally,
- SqlConnection converts this to the PostgreSQL connection string format.
-
- <p>
-<pre>
- OLE-DB: "host=localhost;dbname=test;user=joe;password=smoe"
-PostgreSQL: "host=localhost dbname=test user=joe password=smoe"
-</pre>
-
- <p>
- Note that OLE-DB includes the semicolons while PostgreSQL's connection
- string does not.
<p>
To compile the PostgresTest.cs program, do:
to PgSqlConnection, then you need to run mcs like:
<pre>
- mono f:/cygwin/home/DanielMorgan/mono/install/bin/mcs.exe \
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
PostgresTest.cs \
-r System.Data.dll \
-r Mono.Data.PostgreSqlClient.dll
To run using mono, do:
<pre>
mono PostgresTest.exe
-</pre>
-
- <p>Below, I show how the output from PostgresTest. I have omitted a lot
- of the meta data for the columns except two columns. The classes
- used were from Mono.Data.PostgreSqlClient and were used to connect to a
- PostgreSQL database and retrieve data.
-
-<p>
-<pre>
-
- danmorg@DANPC ~/mono/mcs/class/System.Data/Test
- $ mcs PostgresTest.cs -r System.Data.dll
-
- danmorg@DANPC ~/mono/mcs/class/System.Data/Test
- $ mono PostgresTest.exe
- Postgres provider specific tests...
-
- Drop table:
- Error (don't worry about this one)SqlError:PGRES_FATAL_ERROR ERROR:
- table "mono_postgres_test" does not exist
- <Stack Trace>
-
- Create table with all supported types:
- OK
- Insert values for all known types:
- OK
- Update values:
- OK
- Insert values for all known types:
- OK
- Aggregate: count(*)
- Agg Result: 2
- Aggregate: min(text_value)
- Agg Result: This is a text
- Aggregate: max(int4_value)
- Agg Result: 1048000
- Aggregate: sum(int4_value)
- Agg Result: 1048003
- Select values from the database:
- Result is from a SELECT SQL Query. Records Affected: -1
- Result Set 1...
- Total Columns: 28
- ColumnName = boolean_value
- ColumnOrdinal = 1
- ColumnSize = 1
- NumericPrecision = 0
- NumericScale = 0
- IsUnique = False
- IsKey =
- BaseCatalogName =
- BaseColumnName = boolean_value
- BaseSchemaName =
- BaseTableName =
- DataType = System.Boolean
- AllowDBNull = False
- ProviderType = 16
- IsAliased = False
- IsExpression = False
- IsIdentity = False
- IsAutoIncrement = False
- IsRowVersion = False
- IsHidden = False
- IsLong = False
- IsReadOnly = False
-
- ...
-
- ColumnName = null_timestamp_value
- ColumnOrdinal = 28
- ColumnSize = 8
- NumericPrecision = 0
- NumericScale = 0
- IsUnique = False
- IsKey =
- BaseCatalogName =
- BaseColumnName = null_timestamp_value
- BaseSchemaName =
- BaseTableName =
- DataType = System.DateTime
- AllowDBNull = False
- ProviderType = 1184
- IsAliased = False
- IsExpression = False
- IsIdentity = False
- IsAutoIncrement = False
- IsRowVersion = False
- IsHidden = False
- IsLong = False
- IsReadOnly = False
-
- Gonna do a Read() now...
- Row 0:
- Col 0: boolean_value: False
- Col 1: int2_value: 5
- Col 2: int4_value: 3
- Col 3: bigint_value: 9
- Col 4: float_value: 3.141590
- Col 5: double_value: 3.14159
- Col 6: numeric_value: 123456789012.345
- Col 7: char_value: Mono.Data!
- Col 8: varchar_value: It was not me!
- Col 9: text_value: We got data!
- Col 10: point_value: (1,0)
- Col 11: time_value: 01/01/1 21:13:14
- Col 12: date_value: 02/29/2000 00:00:00
- Col 13: timestamp_value: 02/29/2004 14:00:11
- Col 14: null_boolean_value is NULL
- Col 15: null_int2_value is NULL
- Col 16: null_int4_value is NULL
- Col 17: null_bigint_value is NULL
- Col 18: null_float_value is NULL
- Col 19: null_double_value is NULL
- Col 20: null_numeric_value is NULL
- Col 21: null_char_value is NULL
- Col 22: null_varchar_value is NULL
- Col 23: null_text_value is NULL
- Col 24: null_point_value is NULL
- Col 25: null_time_value is NULL
- Col 26: null_date_value is NULL
- Col 27: null_timestamp_value is NULL
- Row 1:
- Col 0: boolean_value: True
- Col 1: int2_value: -22
- Col 2: int4_value: 1048000
- Col 3: bigint_value: 123456789012345
- Col 4: float_value: 3.141590
- Col 5: double_value: 3.14159
- Col 6: numeric_value: 123456789012.345
- Col 7: char_value: This is a char
- Col 8: varchar_value: This is a varchar
- Col 9: text_value: This is a text
- Col 10: point_value: (1,0)
- Col 11: time_value: 01/01/1 21:13:14
- Col 12: date_value: 02/29/2000 00:00:00
- Col 13: timestamp_value: 02/29/2004 14:00:11
- Col 14: null_boolean_value is NULL
- Col 15: null_int2_value is NULL
- Col 16: null_int4_value is NULL
- Col 17: null_bigint_value is NULL
- Col 18: null_float_value is NULL
- Col 19: null_double_value is NULL
- Col 20: null_numeric_value is NULL
- Col 21: null_char_value is NULL
- Col 22: null_varchar_value is NULL
- Col 23: null_text_value is NULL
- Col 24: null_point_value is NULL
- Col 25: null_time_value is NULL
- Col 26: null_date_value is NULL
- Col 27: null_timestamp_value is NULL
- Total Rows Retrieved: 2
- Total Result sets: 1
- Call ExecuteReader with a SQL Command.
- (Not INSERT,UPDATE,DELETE
- ).
- Result is from a SQL Command not (INSERT,UPDATE,DELETE).
- Records Affected: -1
- Total Result sets: 0
- Call ExecuteReader with a SQL Command.
- (Is INSERT,UPDATE,DELETE)
- .
- Result is from a SQL Command (INSERT,UPDATE,DELETE). Records Affected: 1
- Total Result sets: 0
- Calling stored procedure version()
- Result: PostgreSQL 7.2.1 on i686-pc-cygwin, compiled by GCC 2.95.3-5
- Database Server Version: PostgreSQL 7.2.1 on i686-pc-cygwin,
- compiled by GCC 2.9
- 5.3-5
- Clean up...
- Drop table...
- OK
- RESULT: 0
+</pre>
+ <p>C# Example for Mono.Data.PostgreSqlClient:
+<pre>
+ using System;
+ using System.Data;
+ using Mono.Data.PostgreSqlClient;
+
+ public class Test
+ {
+ public static void Main(string[] args)
+ {
+ string connectionString =
+ "Server=localhost;" +
+ "Database=test;" +
+ "User ID=postgres;" +
+ "Password=fun2db;";
+ IDbConnection dbcon;
+ dbcon = new PgConnection(connectionString);
+ IDbCommand dbcmd = dbcon.CreateCommand();
+ // requires a table to be created named employee
+ // with columns firstname and lastname
+ // such as,
+ // CREATE TABLE employee (
+ // firstname varchar(32),
+ // lastname varchar(32));
+ string sql =
+ "SELECT firstname, lastname" +
+ "FROM employee";
+ dbcmd.ConnectionString = sql;
+ IDataReader reader = dbcmd.ExecuteReader();
+ while(reader.Read()) {
+ string FirstName = reader["firstname"];
+ string LastName = reader["lastname"];
+ Console.WriteLine("Name: " +
+ FirstName + " " + LastName);
+ }
+ // clean up
+ reader.Close();
+ reader = null;
+ dbcmd.Dispose();
+ dbcmd = null;
+ dbcon.Close();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs -r System.Data.dll \
+ -r Mono.Data.PostgreSqlClient.dll
+</pre>
+ </li>
+ <li>Build on Windows via Cygwin:
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ TestExample.cs \
+ -lib:C:/cygwin/home/MyHome/mono/install/lib \
+ -r System.Data.dll -r Mono.Data.PostgreSqlClient.dll
+</pre>
+ </li>
+ </ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
</pre>
+</li>
+</ul>
-* Action Plan
+** Testing Npgsql
- <p>Eventually replace the PostgreSQL data provider in Mono
- with <a href="http://gborg.postgresql.org/project/npgsql/projdisplay.php">Npgsql</a>.
- Npgsql is a .Net Data Provider for PostgreSQL which implements
- the <a href="http://developer.postgresql.org/docs/postgres/protocol.html">PostgreSQL Frontend/Backend Protocol</a>.
- Npgsql is implemented in 100% C#. This provider was created by Francisco Figueiredo jr.
- and has many programmers developing the provider.
+<ul>
+ <li>Have a working mono and mcs</li>
+
+ <li>Get <a href="http://gborg.postgresql.org/project/npgsql/projdisplay.php">Npgsql</a>
+ and make sure the binary assembly Npgsql.dll is installed in the same place that the
+ mono class libraries are located.
+
+ <li>Read the Testing notes for Mono.Data.PostgreSqlClient too
+
+ <li>C# Example for Npgsql:
+<pre>
+ using System;
+ using System.Data;
+ using Npgsql;
+
+ public class Test
+ {
+ public static void Main(string[] args)
+ {
+ string connectionString =
+ "Server=localhost;" +
+ "Database=test;" +
+ "User ID=postgres;" +
+ "Password=fun2db;";
+ IDbConnection dbcon;
+ dbcon = new NpgsqlConnection(connectionString);
+ IDbCommand dbcmd = dbcon.CreateCommand();
+ // requires a table to be created named employee
+ // with columns firstname and lastname
+ // such as,
+ // CREATE TABLE employee (
+ // firstname varchar(32),
+ // lastname varchar(32));
+ string sql =
+ "SELECT firstname, lastname " +
+ "FROM employee";
+ dbcmd.ConnectionString = sql;
+ IDataReader reader = dbcmd.ExecuteReader();
+ while(reader.Read()) {
+ string FirstName = reader["firstname"];
+ string LastName = reader["lastname"];
+ Console.WriteLine("Name: " +
+ FirstName + " " + LastName);
+ }
+ // clean up
+ reader.Close();
+ reader = null;
+ dbcmd.Dispose();
+ dbcmd = null;
+ dbcon.Close();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs -r System.Data.dll \
+ -r Npgsql.dll
+</pre>
+ </li>
+ <li>Build on Windows via Cygwin:
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ TestExample.cs \
+ -lib:C:/cygwin/home/MyHome/mono/install/lib \
+ -r System.Data.dll -r Npgsql.dll
+</pre>
+ </li>
+ </ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
+</pre>
+</li>
+</ul>
+
* Microsoft SQL Server Provider
<ul>
- <li>ADO.NET Provider for Microsoft SQL Server 7/2000 databases
+ <li>ADO.NET Provider for Microsoft SQL Server 7/2000 databases</li>
- <li>Exists in namespace System.Data.SqlClient and assembly System.Data
+ <li>Exists in namespace System.Data.SqlClient and assembly System.Data</li>
- <li>Created by Tim Coleman
+ <li>Created by Tim Coleman</li>
<li>Used the <a href="http://www.freetds.org/">FreeTDS</a> and
- <a href="http://jtds.sourceforge.net/">jTDS</a> projects as resources.
+ <a href="http://jtds.sourceforge.net/">jTDS</a> projects as resources.</li>
- <li>Implemented in 100% C#
+ <li>Implemented in 100% C#</li>
- <li>Is similar to the Mono.Data.TdsClient and Mono.Data.SybaseClient providers.
+ <li>Is similar to the Mono.Data.TdsClient and Mono.Data.SybaseClient providers.</li>
+
+ <li>Requires the assembly Mono.Data.Tds.dll which implements the TDS protocol in 100% C#.</li>
+
+ <li>Uses TDS Protocol Version 7.0</li>
+
+ <li>Does not support trusted connections</li>
</ul>
-* Current Status
-
+
+** Current Status
+
+
<ul>
- <li>Able to connect to Microsoft SQL Server 7/2000 databases
+ <li>Able to connect to Microsoft SQL Server 7/2000 databases</li>
- <li>Connection pooling works.
+ <li>Connection pooling works.</li>
- <li>Stored Procedures work
+ <li>Stored Procedures work</li>
- <li>Parameters work.
+ <li>Parameters work.</li>
- <li>Prepare works.
+ <li>Prepare works.</li>
<li>SQL commands can be executed
- via ExecuteNonQuery() of a SqlCommand.
+ via ExecuteNonQuery() of a SqlCommand.</li>
<li>SQL aggregates can be executed and a single row and single column
- result can be retrieved via ExecuteScalar() of a SqlCommand
+ result can be retrieved via ExecuteScalar() of a SqlCommand</li>
<li>SQL queries can be executed via ExecuteReader() and results
- can be retrieved via SqlDataReader.
+ can be retrieved via SqlDataReader.</li>
<li>a DataTable with schema info about a result can be gotten via GetSchemaTable()
- in a SqlDataReader
+ in a SqlDataReader</li>
- <li>XML can be read via ExecuteXmlReader in a SqlCommand.
+ <li>XML can be read via ExecuteXmlReader in a SqlCommand.</li>
- <li>Data can be filled in a DataTable in a DataSet via a SqlDataAdapter
+ <li>Data can be filled in a DataTable in a DataSet via a SqlDataAdapter</li>
- <li>Uses TDS Protocol Version 7.0
+ <li>Uses TDS Protocol Version 7.0</li>
- <li><a href="http://www.go-mono.com/tds-providers.html">Design of the Microsoft SQL Server, Sybase, and TDS Providers in Mono</a>
+ <li><a href="http://www.go-mono.com/tds-providers.html">Design of the Microsoft SQL Server, Sybase, and TDS Providers in Mono</a></li>
</ul>
-* Action plan
+** Action plan
<ul>
<li>Connection timeouts is being developed now.
- <li>TODO
+ <li>Needs more testing...
+
</ul>
+
+** Testing
+
+<ul>
+ <li>Have a working mono and mcs installed</li>
+
+ <li>Have access to a Microsoft SQL Server database
+ or either download it:
+ <ul>
+ <li><a href="http://www.microsoft.com/sql/default.asp">Microsoft SQL Server</a></li>
+ </ul>
+ </li>
+
+ <li>Located at mcs/class/System.Data/Test is a test for System.Data.SqlClient
+ named SqlTest.cs and you could use this as a basis for your test.</li>
+
+ <li>C# Example:
+<pre>
+ using System;
+ using System.Data;
+ using System.Data.SqlClient;
+
+ public class Test
+ {
+ public static void Main(string[] args)
+ {
+ string connectionString =
+ "Server=localhost;" +
+ "Database=pubs;" +
+ "User ID=sa;" +
+ "Password=;";
+ IDbConnection dbcon;
+ dbcon = new SqlConnection(connectionString);
+ IDbCommand dbcmd = dbcon.CreateCommand();
+ string sql =
+ "SELECT fname, lname " +
+ "FROM employee";
+ dbcmd.ConnectionString = sql;
+ IDataReader reader = dbcmd.ExecuteReader();
+ while(reader.Read()) {
+ string FirstName = reader["fname"];
+ string LastName = reader["lname"];
+ Console.WriteLine("Name: " +
+ FirstName + " " + LastName);
+ }
+ // clean up
+ reader.Close();
+ reader = null;
+ dbcmd.Dispose();
+ dbcmd = null;
+ dbcon.Close();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs -r System.Data.dll
+</pre>
+ </li>
+ <li>Build on Windows via Cygwin:
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ TestExample.cs -r System.Data.dll
+</pre>
+ </li>
+ </ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
+</pre>
+ </li>
+
+</ul>
+
* SQL Lite Data Provider
<ul>
- <li>Exists in namespace and assembly Mono.Data.SqliteClient
+ <li>Exists in namespace and assembly Mono.Data.SqliteClient</li>
- <li>Created by Vladimir Vukicevic
+ <li>Created by Vladimir Vukicevic</li>
<li><a href"http://www.hwaci.com/sw/sqlite/download.html">SQL Lite</a>
binaries exist for Linux and Windows. sqlite.dll on Windows
- and sqlite.so on Linux.
+ and sqlite.so on Linux.</li>
</ul>
-* Current Status
+** Current Status
<ul>
- <li>Able to connect, execute commands, and retrieve data...
+ <li>Able to connect, execute commands, and retrieve data...</li>
- <li>Works in mPhoto
+ <li>Works in mPhoto by providing access to a SQL Lite database to store images.</li>
</ul>
-* Action Plan
+** Action Plan
<ul>
<li>Create a DataAdapter for SQL Lite named SqliteDataAdapter that can be used to
- Fill a DataTable in a DataSet
+ Fill a DataTable in a DataSet</li>
- <li>TODO
+ <li>Get the method GetSchemaTable() in class SqliteDataReader to return a DataTable
+ that works</li>
</ul>
+
+** Testing
+
+<ul>
+ <li>Have a working mcs and mono</li>
+ <li>Make sure Mono.Data.SqliteClient.dll was built and is installed
+ in the same place as the mono class libraries.</li>
+ <li>If you do not have <a href"http://www.hwaci.com/sw/sqlite/download.html">SQL Lite</a>,
+ download it. There are binaries for Windows and Linux.</li>
+ <li>There is a test named SqliteTest.cs found at mcs/class/Mono.Data.SqliteTest/Test</li>
+ <li>Has a connection string format of "URI=file:some/path". For example,
+ the connection string "URI=file:SqliteTest.db" will use the database file
+ named SqliteTest.db, if it does not exist, the file will be created.</li>
+ <li>C# Example:
+<pre>
+ using System;
+ using System.Data;
+ using Mono.Data.SqliteClient;
+
+ public class Test
+ {
+ public static void Main(string[] args)
+ {
+ string connectionString = "URI=file:SqliteTest.db";
+ IDbConnection dbcon;
+ dbcon = new MySQLConnection(connectionString);
+ IDbCommand dbcmd = dbcon.CreateCommand();
+ // requires a table to be created named employee
+ // with columns firstname and lastname
+ // such as,
+ // CREATE TABLE employee (
+ // firstname varchar(32),
+ // lastname varchar(32));
+ string sql =
+ "SELECT firstname, lastname " +
+ "FROM employee";
+ dbcmd.ConnectionString = sql;
+ IDataReader reader = dbcmd.ExecuteReader();
+ while(reader.Read()) {
+ string FirstName = reader[0];
+ string LastName = reader[1];
+ Console.WriteLine("Name: " +
+ FirstName + " " + LastName);
+ }
+ // clean up
+ reader.Close();
+ reader = null;
+ dbcmd.Dispose();
+ dbcmd = null;
+ dbcon.Close();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs -r System.Data.dll \
+ -r Mono.Data.SqliteClient.dll
+</pre>
+ </li>
+ <li>Build on Windows via Cygwin:
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ TestExample.cs \
+ -lib:C:/cygwin/home/MyHome/mono/install/lib \
+ -r System.Data.dll \
+ -r Mono.Data.SqliteClient.dll
+</pre>
+ </li>
+ </ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
+</pre>
+ </li>
+
+</ul>
+
* Sybase Data Provider
<ul>
- <li>ADO.NET Provider for Sybase SQL Server databases
+ <li>ADO.NET Provider for Sybase SQL Server databases</li>
- <li>Exists in namespace Mono.Data.SybaseClient and assembly Mono.Data.SybaseClient
+ <li>Exists in namespace Mono.Data.SybaseClient and assembly Mono.Data.SybaseClient</li>
- <li>Created by Tim Coleman
+ <li>Created by Tim Coleman</li>
<li>Used the <a href="http://www.freetds.org/">FreeTDS</a> and
- <a href="http://jtds.sourceforge.net/">jTDS</a> projects as resources.
+ <a href="http://jtds.sourceforge.net/">jTDS</a> projects as resources.</li>
- <li>Implemented in 100% C#
+ <li>Implemented in 100% C#</li>
- <li>Is similar to the Mono.Data.TdsClient and System.Data.SqlClient providers.
+ <li>Is similar to the Mono.Data.TdsClient and System.Data.SqlClient providers.</li>
- <li>Uses TDS Protocol Version 5.0
+ <li>Requires the assembly Mono.Data.Tds.dll which implements the TDS protocol in 100% C#.</li>
- <li><a href="http://www.go-mono.com/tds-providers.html">Design of the Microsoft SQL Server, Sybase, and TDS Providers in Mono</a>
+ <li>Uses TDS Protocol Version 5.0</li>
+
+ <li>Does not support trusted connections</li>
</ul>
-* Current Status
+** Current Status
<ul>
- <li>Able to connect to Sybase databases
+ <li>Able to connect to Sybase databases</li>
<li>SQL commands can be executed
- via ExecuteNonQuery() of a SybaseCommand.
+ via ExecuteNonQuery() of a SybaseCommand.</li>
<li>SQL aggregates can be executed and a single row and single column
- result can be retrieved via ExecuteScalar() of a SybaseCommand
+ result can be retrieved via ExecuteScalar() of a SybaseCommand</li>
<li>SQL queries can be executed via ExecuteReader() and results
- can be retrieved via SybaseDataReader.
+ can be retrieved via SybaseDataReader.</li>
<li>a DataTable with schema info about a result can be gotten via GetSchemaTable()
- in a SybaseDataReader
+ in a SybaseDataReader</li>
- <li>Data can be filled in a DataTable in a DataSet via a SybaseDataAdapter
+ <li>Data can be filled in a DataTable in a DataSet via a SybaseDataAdapter</li>
</ul>
-* Action plan
+** Action plan
<ul>
<li>Connection timeouts is being developed now.
+
+ <li>Needs more testing...
- <li>TODO
</ul>
+
+** Testing
+
+<ul>
+ <li>Have a working mono and mcs installed</li>
+
+ <li>Have access to a Sybase database
+ or either download it:
+ <ul>
+ <li><a href="http://www.sybase.com/downloads">Sybase</a></li>
+ </ul>
+ </li>
+
+ <li>Located at mcs/class/System.Data/Test is a test for System.Data.SqlClient
+ named SqlTest.cs and you could use this as a basis for your test.</li>
+
+ <li>C# Example:
+<pre>
+ using System;
+ using System.Data;
+ using Mono.Data.SybaseClient;
+
+ public class Test
+ {
+ public static void Main(string[] args)
+ {
+ string connectionString =
+ "Server=localhost;" +
+ "Database=pubs;" +
+ "User ID=sa;" +
+ "Password=;";
+ IDbConnection dbcon;
+ dbcon = new SybaseConnection(connectionString);
+ IDbCommand dbcmd = dbcon.CreateCommand();
+ string sql =
+ "SELECT fname, lname " +
+ "FROM employee";
+ dbcmd.ConnectionString = sql;
+ IDataReader reader = dbcmd.ExecuteReader();
+ while(reader.Read()) {
+ string FirstName = reader["fname"];
+ string LastName = reader["lname"];
+ Console.WriteLine("Name: " +
+ FirstName + " " + LastName);
+ }
+ // clean up
+ reader.Close();
+ reader = null;
+ dbcmd.Dispose();
+ dbcmd = null;
+ dbcon.Close();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs -r System.Data.dll \
+ -r Mono.Data.SybaseClient.dll
+</pre>
+ </li>
+ <li>Build on Windows via Cygwin:
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ TestExample.cs \
+ -lib:C:/cygwin/home/MyHome/mono/install/lib \
+ -r System.Data.dll -r Mono.Data.SybaseClient.dll
+</pre>
+ </li>
+ </ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
+</pre>
+ </li>
+
+</ul>
+
* TDS Generic Provider
<ul>
- <li>ADO.NET Provider for older Sybase and Microsoft SQL Server databases
+ <li>ADO.NET Provider for older Sybase and Microsoft SQL Server databases</li>
- <li>Exists in namespace Mono.Data.TdsClient and assembly Mono.Data.TdsClient
+ <li>Exists in namespace Mono.Data.TdsClient and assembly Mono.Data.TdsClient</li>
- <li>Created by Tim Coleman
+ <li>Created by Tim Coleman</li>
<li>Used the <a href="http://www.freetds.org/">FreeTDS</a> and
- <a href="http://jtds.sourceforge.net/">jTDS</a> projects as resources.
+ <a href="http://jtds.sourceforge.net/">jTDS</a> projects as resources.</li>
- <li>Implemented in 100% C#
+ <li>Implemented in 100% C#</li>
- <li>Is similar to the Mono.Data.SybaseClient and System.Data.SqlClient providers.
+ <li>Is similar to the Mono.Data.SybaseClient and System.Data.SqlClient providers.</li>
- <li>Uses TDS Protocol Version 4.2 by default
+ <li>Requires the assembly Mono.Data.Tds.dll which implements the TDS protocol in 100% C#.</li>
- <li><a href="http://www.go-mono.com/tds-providers.html">Design of the Microsoft SQL Server, Sybase, and TDS Providers in Mono</a>
+ <li>Uses TDS Protocol Version 4.2 by default</li>
+
+ <li>Does not support trusted connections</li>
</ul>
-* Current Status
+** Current Status
+
<ul>
<li>Only builds on Windows currently due to mcs does not support modules and mcs
- has problems with code that is internal.
+ has problems with code that is internal.</li>
- <li>Able to connect to Microsoft SQL Server and Sybase databases
+ <li>Able to connect to Microsoft SQL Server and Sybase databases</li>
<li>SQL commands can be executed
- via ExecuteNonQuery() of a TdsCommand.
+ via ExecuteNonQuery() of a TdsCommand.</li>
<li>SQL aggregates can be executed and a single row and single column
- result can be retrieved via ExecuteScalar() of a TdsCommand
+ result can be retrieved via ExecuteScalar() of a TdsCommand</li>
<li>SQL queries can be executed via ExecuteReader() and results
- can be retrieved via TdsDataReader.
+ can be retrieved via TdsDataReader.</li>
<li>a DataTable with schema info about a result can be gotten via GetSchemaTable()
- in a TdsDataReader
+ in a TdsDataReader</li>
- <li>Data can be filled in a DataTable in a DataSet via a TdsDataAdapter
+ <li>Data can be filled in a DataTable in a DataSet via a TdsDataAdapter</li>
</ul>
-* Action plan
+** Action plan
<ul>
- <li>Connection timeouts is being developed now.
+ <li>Connection timeouts is being developed now.</li>
+
+ <li>TODO</li>
+</ul>
+
+** Testing
- <li>TODO
+<ul>
+ <li>Have a working mono and mcs installed</li>
+
+ <li>Have access to a Sybase or Microsoft SQL Server database
+ or either download it:
+ <ul>
+ <li><a href="http://www.microsoft.com/sql/default.asp">Microsoft SQL Server</a></li>
+ <li><a href="http://www.sybase.com/downloads">Sybase</a></li>
+ </ul>
+ </li>
+
+ <li>Located at mcs/class/System.Data/Test is a test for System.Data.SqlClient
+ named SqlTest.cs and you could use this as a basis for your test.</li>
+
+ <li>C# Example:
+<pre>
+ using System;
+ using System.Data;
+ using Mono.Data.TdsClient;
+
+ public class Test
+ {
+ public static void Main(string[] args)
+ {
+ string connectionString =
+ "Server=localhost;" +
+ "Database=pubs;" +
+ "User ID=sa;" +
+ "Password=;";
+ IDbConnection dbcon;
+ dbcon = new TdsConnection(connectionString);
+ IDbCommand dbcmd = dbcon.CreateCommand();
+ string sql =
+ "SELECT fname, lname " +
+ "FROM employee";
+ dbcmd.ConnectionString = sql;
+ IDataReader reader = dbcmd.ExecuteReader();
+ while(reader.Read()) {
+ string FirstName = reader["fname"];
+ string LastName = reader["lname"];
+ Console.WriteLine("Name: " +
+ FirstName + " " + LastName);
+ }
+ // clean up
+ reader.Close();
+ reader = null;
+ dbcmd.Dispose();
+ dbcmd = null;
+ dbcon.Close();
+ dbcon = null;
+ }
+ }
+</pre>
+ </li>
+ <li>Building C# Example:
+ <ul>
+ <li>Save the example to a file, such as, TestExample.cs</li>
+ <li>Build on Linux:
+<pre>
+ mcs TestExample.cs -r System.Data.dll \
+ -r Mono.Data.TdsClient.dll
+</pre>
+ </li>
+ <li>Build on Windows via Cygwin:
+<pre>
+ mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
+ TestExample.cs \
+ -lib:C:/cygwin/home/MyHome/mono/install/lib \
+ -r System.Data.dll -r Mono.Data.TdsClient.dll
+</pre>
+ </li>
+ </ul>
+ </li>
+ <li>Running the Example:
+<pre>
+mono TestExample.exe
+</pre>
+ </li>
</ul>
+
0,Plans,plans.html,plans.src
1,ADO.NET,ado-net.html,ado-net.src
2,Firebird Interbase,firebird.html,firebird.src
+2,IBM DB2,ibmdb2.html,ibmdb2.src
2,Microsft SQL Server,sqlclient.html,sqlclient.src
2,MySQL,mysql.html,mysql.src
2,ODBC,odbc.html,odbc.src
OBJECTS= \
deploy/ado-net.html \
deploy/firebird.html \
+ deploy/ibmdb2.html \
deploy/mysql.html \
deploy/odbc.html \
deploy/oledb.html \