-* PostgreSQL Data Provider
+* PostgreSQL and Mono
+
+ When it comes to Mono and PostgreSQL, there are many ways
+ you can handle your data. You have many Mono Data Providers which can be used
+ to access data from a application written for Mono.
+ Then there is the future goal of having the ability to host Mono within PostgreSQL to
+ have the applications run on the server which makes things much faster.
+
+* Hosting Mono in PostgreSQL
+
+ There is a project to <a href="http://gborg.postgresql.org/project/plmono/projdisplay.php">host Mono within PostgreSQL</a>.
+
+ plMono is a PostgreSQL language using the embedded Mono runtime. It provides support for writing functions in C#, or any other language that supports .NET.
+
+* Data Providers
+
+ There are many ADO.NET data providers for <a href="http://www.postgresql.org/">PostgreSQL</a>:
+
+ There are two providers created specifically for PostgreSQL included with Mono:
<ul>
- <li>Exists in namespace Mono.Data.PostgreSql and assembly Mono.Data.PostgreSql</li>
+
+ <li><a href="http://gborg.postgresql.org/project/npgsql/projdisplay.php">Npgsql</a>
+ <ul>
+ <li>included with Mono</li>
+
+ <li>a .NET Managed Data Provider for PostgreSQL</li>
+
+ <li>Written in 100% C#</li>
+
+ <li>does not require a client library</li>
+
+ <li>works on Mono and Microsoft .NET</li>
+
+ <li>created by Francisco Figueiredo jr. and has many developers working on it
+
+ <li>works in the SQL# (command-line and GTK# GUI versions)</li>
+
+ <li>in namespace Npgsql and assembly Npgsql and is found in mcs
+ at mcs/class/Npgsql</li>
+ </ul>
+ </li>
- <li>Is a Mono Data Provider for the <a href="http://www.postgresql.org/">PostgreSQL</a>
- client/server database management system.</li>
+ <li>Mono.Data.PostgreSQL (deprecated)
+ <ul>
+ <li>included with Mono</li>
+
+ <li>Deprecated in favor of Npgsql</li>
+
+ <li>Exists in namespace Mono.Data.PostgreSql and assembly Mono.Data.PostgreSql</li>
- <li>Written in C# and has C# bindings to the PostgreSQL C Client library pq.dll on Windows
- and libpq.so on Linux.</li>
+ <li>Is a Mono Data Provider for the <a href="http://www.postgresql.org/">PostgreSQL</a>
+ client/server database management system.</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. Npgsql providers works in the SQL# command-line version
- and the GTK# version.
- </li>
+ <li>Written in C# and has C# bindings to the PostgreSQL C Client library pq.dll on Windows
+ and libpq.so on Linux.</li>
</ul>
</li>
- <li>See Testing for both Mono's Mono.Data.PostgreSqlClient and Npgsql.</li>
+ <li><a href="http://sourceforge.net/projects/mysqlnet/">ByteFX.Data</a> has a provider for PostgreSQL too, but I do not know how well it works with Mono.</li>
+
+ <li>There is another .NET data provider for PostgreSQL named <a href="http://sourceforge.net/projects/pgsqlclient/">PgSqlClient</a>, but I do not know if it works with Mono.</li>
+
+ <li>If none of the above providers meet your needs. There is the ODBC and OLEDB providers included with Mono.</li>
+
+ <li>Bugs with Mono or the data provider should be reported
+ in Mono's Bugzilla <a href="http://bugzilla.ximian.com/">here</a>. If you
+ do not have Bugzilla user account, it is free
+ and easy to
+ create one <a href="http://bugzilla.ximian.com/createaccount.cgi">here</a>.</li>
+
+
</ul>
+ Below, see separate Testing sections for Npgsql and Mono.Data.PostgreSqlClient.
+
** Current Status
<ul>
+ <li>Npgsql
+ <ul>
+ <li>Builds and Runs on both Microsoft .NET and Mono.</li>
+ <li>Works using SQL# (command-line and GTK# versions)</li>
+ <li>You can send insert, update, delete queries \r
+ through NpgsqlCommand.ExecuteNonQuery() method.</li>\r
+ <li>You can send queries like, select count(*) from table, select version()\r
+ with NpgsqlCommand.ExecuteScalar() method.</li>\r
+ <li>There is logging support. (Thanks Dave Page)\r
+ To use it, place code like that in your program:</li>\r
+\r
+<pre> \r
+ // Enable logging.\r
+ NpgsqlEventLog.Level = LogLevel.Debug; // LogLevel.\r
+ NpgsqlEventLog.LogName = "NpgsqlTests.LogFile"; // LogFile.\r
+</pre>\r
+ \r
+ <li>You can use Npgsql with Mono (Thanks Kristis Makris). It is not working perfectly.</li>\r
+ <li>There is a winforms test suite (Thanks Dave Page).</li>\r
+ <li>Clearer code in NpgsqlConnection removing *magic* numbers and constants. (Thanks Kristis Makris)</li>\r
+ <li>Better support of ODBC-like ConnectionString in NpgsqlConnection (Thanks Dave Page)</li>\r
+ <li>Thanks Ulrich Sprick for all discussion and ideas.</li>\r
+
+ </ul>
+ </li>
+ <li>Mono.Data.PostgreSQL status
+ <ul>
+
+ <li>Deprecated in favor of Npgsql</li>
+
<li>We are able to do simple CREATE TABLE, DROP TABLE, UPDATE, INSERT, and
DELETE SQL commands using the ExecuteNonQuery method in PgSqlCommand.</li>
Input Parameters are currently supported. Output, Input/Output,
and Return parameters still need to be done.</li>
- <li>A lot of functionality in System.Data is missing, but the
- infrastructure is starting to come together.</li>
-
<li>A lot of Exceptions need to be thrown for various exceptions. However,
PgSqlException, PgSqlErrorCollection, and PgSqlError have been partially
implemented.</li>
See the test mcs/class/System.Data/Test/TestSqlDataAdapter.cs to see it in action.</li>
<li>Works in the SQL# command-line version
- and the GTK# version.</li>
+ and the GTK# version on Linux. It only works in SQL# command-line version
+ on Windows.</li>
+
+ </ul>
+ </li>
+
</ul>
** Action Plan
+ <ul>
+ <li>More testing and fixing bugs</li>
+
+ <li>Better error handling</li>
+
+ <li>More Data Types to use</li>
+
+ <li>Any features for Npgsql should be implemented in Npgsql's main cvs repository at
+ gborg.postgresql.org. Most bugs should be fixed in gborg.postgresql.org's cvs.
+ Only bugs neccessary for building and running of Npgsql on Mono can be done in Mono cvs,
+ but once applied they should be sent to Npgsql's mailing list
+ at gborg.postgresql.org for inclusion into cvs there. Whenever there is
+ a release of Npgsql (determined by Francisco Figueiredo jr. or a release
+ of Mono (determined by Miguel de Icaza), then the Npgsql source
+ in gborg.postgresql.org's cvs will be used to update the Npgsql source in
+ Mono's cvs.
+ </li>
+
+ <li>Mono.Data.PostgreSqlClient even though deprecated can still
+ accept bug fixes. This is because other areas, such as, ASP.NET examples
+ may still use this provider.</li>
+
+ <li>Add any missing functionality to Npgsql. If this funtionality works on
+ .NET but not on Mono, implement the missing features or fix the bugs in Mono</li>
- <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.
+ <li>Npgsql has replaced Mono.Data.PostgreSqlClient as the provider of
+ choice to use. However, Mono.Data.PostgreSqlClient will remain in a
+ deprecated state until nobody uses it anymore - then it can be removed</li>
+
+ <li>Implement more of PostgreSQL 7.3 features in Npgsql</li>
+ </ul>
-** Testing Mono's Mono.Data.PostgreSqlClient
+** Testing Mono.Data.PostgreSqlClient
<ul>
* <p>In order to test Mono.Data.PostgreSqlClient, you will need to have
"Password=fun2db;";
IDbConnection dbcon;
dbcon = new PgConnection(connectionString);
+ dbcon.Open();
IDbCommand dbcmd = dbcon.CreateCommand();
// requires a table to be created named employee
// with columns firstname and lastname
dbcmd.CommandText = sql;
IDataReader reader = dbcmd.ExecuteReader();
while(reader.Read()) {
- string FirstName = reader["firstname"];
- string LastName = reader["lastname"];
+ string FirstName = (string) reader["firstname"];
+ string LastName = (string) reader["lastname"];
Console.WriteLine("Name: " +
FirstName + " " + LastName);
}
"User ID=postgres;" +
"Password=fun2db;";
IDbConnection dbcon;
+ dbcon.Open();
dbcon = new NpgsqlConnection(connectionString);
IDbCommand dbcmd = dbcon.CreateCommand();
// requires a table to be created named employee
dbcmd.CommandText = sql;
IDataReader reader = dbcmd.ExecuteReader();
while(reader.Read()) {
- string FirstName = reader["firstname"];
- string LastName = reader["lastname"];
+ string FirstName = (string) reader["firstname"];
+ string LastName = (string) reader["lastname"];
Console.WriteLine("Name: " +
FirstName + " " + LastName);
}