* ADO.NET The coordinator for the ADO.NET implementation is Rodrigo Moya, with the collaboration of Daniel Morgan. * Action plan The current plan to implement ADO.NET is as follows: Step 1: SqlClient: Step 2: System.Data.OleDb Provider: Step 3: System.Data.SqlClient Provider: Step 4: System.Data.Odbc Provider: Step 5: Other System.Data providers: * Current Status

We are still working on Step 1, but we are planning the other steps. If you have any ideas, let us know.

We are able to do simple CREATE TABLE, DROP TABLE, UPDATE, INSERT, and DELETE SQL commands using the ExecuteNonQuery method in SqlCommand.

We are also able to do simple aggregate functions, ie, count(), sum(), min(), and max() in a simple SELECT SQL query using the ExecuteScalar() now.

We are also able to retrieve data with a simple SELECT SQL query using ExecuteReader() which returns a SqlDataReader. We are able to use GetSchemaTable() to get the meta data about the table columns. We are able to Read() to get each row from the result set. We are able to get String data (char, bpchar (character), text, varchar), Int16 (int2 or smallint), Int32 (int4 or integer), Int64 (int8 or bigint), DateTime (time, date, timestamp), Boolean (boolean), Single (float), and Double (double). Other More data types will follow later on.

Parameters and stored procedures have not been tested and most likely do not work.

A lot of functionality in System.Data is missing, but the infrastructure is starting to come together.

Need help on the DataSet/DataAdaptor/DataTable/DataRelation/XML functionality so we can integrate with the ASP.NET controls and Windows.Forms.

Need to add XML support in System.Data.

The System.Data.dll gets built with the rest of the class library. To compile the System.Data.dll assembly separately, you need: On GNU/Linux and Unix

On Windows * Testing

In order to test System.Data.SqlClient, you will need to have access to a remote PostgreSQL DBMS, or you will have to install one locally. PostgreSQL is the DBMS used for the initial implementation of System.Data.SqlClient.

Why? Because it is open source, has a client library that is easy to use, PostgreSQL on Windows is easy to install on Unix and Windows (using the Cygwin install program), not difficult to setup after installation, and it runs under: Linux, Windows (via cygwin and ipc-daemon), Unix, and others. This allowed us to create the System.Data functionality in Mono much quicker.

If you plan on using a remote PostgreSQL DBMS Server, than you will need to have the PostgreSQL client software on your local computer that includes libpq.so (pq.dll on Windows).

The System.Data tests use this connection string to connect to the PostgreSQL database named "test" at host "localhost" as user "postgres".

"host=localhost;dbname=test;user=postgres"

Installation instructions for PostgreSQL DBMS: On GNU/Linux and Unix

On Windows

In the path mcs/class/System.Data/Test there is a PostgreSQL test program named PostgreTest.cs. Thanks goes to Gonzalo for creating the original PostgreSQL test.

To use it to test System.Data, you modify the file to your PostgreSQL database connection requirements:

The connection string is in OLE-DB connection string format. Internally, SqlConnection converts this to the PostgreSQL connection string format.

    OLE-DB: "host=localhost;dbname=test;user=joe;password=smoe"
PostgreSQL: "host=localhost dbname=test user=joe password=smoe"

Note that OLE-DB includes the semicolons while PostgreSQL's connection string does not.

To compile the PostgresTest.cs program, do:

mcs PostgresTest.cs -r System.Data.dll

To run using mint, do:

mint PostgresTest.exe

To run using mono, do:

mono PostgresTest.exe

You should get something like:

   
 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
  

                 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:
                 Get Schema.
 dt.Columns.Count: 12
 * Column Name: boolean_value
          MaxLength: 1
          Type: System.Boolean
 * Column Name: int2_value
          MaxLength: 2
          Type: System.Int16
 * Column Name: int4_value
          MaxLength: 4
          Type: System.Int32
 * Column Name: bigint_value
          MaxLength: 8
          Type: System.Int64
 * Column Name: float_value
          MaxLength: 4
          Type: System.Single
 * Column Name: double_value
          MaxLength: 8
          Type: System.Double
 * Column Name: char_value
          MaxLength: -1
          Type: System.String
 * Column Name: varchar_value
          MaxLength: -1
          Type: System.String
 * Column Name: text_value
          MaxLength: -1
          Type: System.String
 * Column Name: time_value
          MaxLength: 8
          Type: System.DateTime
 * Column Name: date_value
          MaxLength: 4
          Type: System.DateTime
 * Column Name: timestamp_value
          MaxLength: 8
          Type: System.DateTime
 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.141593
     Col 6: char_value: Mono.Data!
     Col 7: varchar_value: It was not me!
     Col 8: text_value: We got data!
     Col 9: time_value: Monday, 01 January 1 21:13:14
     Col 10: date_value: Tuesday, 29 February 2000 00:00:00
     Col 11: timestamp_value: Sunday, 29 February 2004 14:00:11
 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.141593
     Col 6: char_value: This is a char
     Col 7: varchar_value: This is a varchar
     Col 8: text_value: This is a text
     Col 9: time_value: Monday, 01 January 1 21:13:14
     Col 10: date_value: Tuesday, 29 February 2000 00:00:00
     Col 11: timestamp_value: Sunday, 29 February 2004 14:00:11
 Rows: 2
 Clean up...
                 Drop table...
 OK
 RESULT: 0