2002-05-13 Miguel de Icaza <miguel@ximian.com>
[mono.git] / web / ado-net
index 87d2f1f86d213356bf1c31afed86d4b785fa5281..54aeb2cfc52f94c74d1ddb44ae89d01dd56352a9 100644 (file)
 
        <ul>
                * Implementation of System.Data.SqlClient based on
-                 the PostgreSQL C API.
+                 the <a href="http://www.postgresql.org/idocs/">PostgreSQL C API</a>
 
-               * Once the System.Data.SqlClient code is functional and
-                 is usable by other people, we willl move it to
+               * Once the <a href="http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemdatasqlclient.asp?frame=true">System.Data.SqlClient</a>
+                 code is functional and is usable by other people, we willl move it to
                  System.Data.PostgreSQL, and will convert the existing
                  System.Data.SqlClient to be just a wrapper around
                  System.Data.PostgreSQL.  
 
        </ul>
 
-       <b>Step 2:</b> OleDB:
+       <b>Step 2:</b> <a href="http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemDataOleDb.asp?frame=true">System.Data.OleDb</a> Provider:
+               
        <ul>
-               * On Unix systems: System.Data.OleDb will use LibGDA as its
-                 engine. 
+               * On Unix systems: System.Data.OleDb will use the
+               <a href="http://www.gnome-db.org/">LibGDA</a>
+                engine. 
 
-                 LibGDA is the data access engine that is used by
-                 Gnome-Db (only libgda, not libgnomedb at all).
+                 LibGDA is a data access engine like ADO/OLE-DB, but for Unix.  It is
+                 used by Gnome-Db and libgnomedb.  There is work under way to get libgda
+                 working under Windows by the Gnome-Db developers.
 
                * On Windows systems: System.Data.OleDb will use OLE-DB as
-                 its engine.
+                 its engine.  It may have the option of using libgda too.
        </ul>
 
-       <b>Step 3:</b> System.Data.SqlClient Providers:
+       <b>Step 3:</b> <a href="http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemdatasqlclient.asp?frame=true">System.Data.SqlClient</a> Provider:
 
        <ul>
-               * System.Data.SqlClient will then become a generic
-                 proxy for binding to other SQL implementations other
-                 than PostgreSQL (MySQL on Unix/Windows; MS SQL on
-                 Window; Interbase on Unix/Windows). Others are welcomed.
+               * <p>System.Data.SqlClient will then become a managed
+                 provider for Microsoft SQL Server, both on Windows and
+                 Linux, to be compatible with applications written
+                 for the Microsoft .NET Development Framework.
+                 
+                 <p>Once Step 1 has been completed and the PostgreSQL
+                 provider support has been moved to its own place at 
+                 System.Data.PostgreSQL, we will use 
+                 <a href="http://www.freetds.org/">FreeTDS</a> as the basis
+                 for providing access to Microsoft SQL Server databases.
+                 
+                 FreeTDS is a C API for Unix and Windows that implements 
+                 the TDS (Tabular Data Stream) protocol used in accessing 
+                 Microsoft SQL Server and Sybase databases.
+       </ul>
+
+       <b>Step 4:</b> <a href="http://msdn.microsoft.com/downloads/sample.asp?url=/MSDN-FILES/027/001/668/msdncompositedoc.xml&frame=true">System.Data.Odbc</a> Provider:
+       
+       <ul>
+               * We will create a .NET Managaed Provider for ODBC
+                 in System.Data.Odbc for those using ODBC.
+                 On Unix and Windows, <a href="http://www.unixodbc.org/">unixODBC</a> will be used.
+                 
+                 unixODBC works on Unix and Windows.  Providers exist for
+                 Oracle, Microsoft SQL Server and Sybase via FreeTDS, 
+                 MySQL, PostgreSQL, IBM DB2, Interbase, and others.
+                 
        </ul>
 
-       <b>Step 4:</b> Other System.Data providers:
+       <b>Step 5:</b> Other System.Data providers:
 
        <ul>
-               * The idea in MS .NET System.Data seems to be to have
+               * The idea in Microsoft .NET System.Data seems to be to have
                  a managed provider for each supported DBMS. So, apart
                  from System.Data.OleDb (generic) and System.Data.SqlClient,
-                 we'll need to have System.Data.ODBC, System.Data.MySQL,
-                 System.Data.Oracle, System.Data.PostgreSQL, etc. Others,
+                 we'll need to have System.Data.MySQL,
+                 System.Data.Oracle, and System.Data.PostgreSQL. Others,
                  of course, are welcomed.
        </ul>
        
 * Current Status
 
-       We are able to do simple CREATE TABLE, DROP TABLE, INSERT, and
+       <p>We are still working on Step 1, but we are planning the other steps.
+       If you have any ideas, let us know.
+       
+       <p>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(), avg(), min(), and
-       max() in a simple SELECT SQL query using ExecuteSecalar() now.  
+       <p>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 
+       <p>We are also able to retrieve data with a simple SELECT SQL query 
        using ExecuteReader() which returns a SqlDataReader.  We are able to
-       GetSchemaTable() 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 
+       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),
-       and Int32 (int4 or integer), Int64 (int8 or bigint).  More data types will
-       follow later on.
+       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 are not working nor has stored procedures been tested - but they will be.
+       <p>Parameters and stored procedures have not been tested and most likely
+       do not work.
+       
+       <p>A lot of functionality in System.Data is missing, but the 
+       infrastructure is starting to come together.
        
-       A lot of functionality in System.Data is missing, but the infrastructure is
-       starting to come together.
+       <p>Need help on the DataSet/DataAdaptor/DataTable/DataRelation/XML 
+       functionality so we     can integrate with 
+       the ASP.NET controls and Windows.Forms.  
        
-       To compile that test program, you need:
+       <P>Need to add XML support in System.Data.
+       
+       <p>The System.Data.dll gets built with the rest of the class library.
+       To compile the System.Data.dll assembly separately, you need:
 
-       <b>On Linux</b>
+       <b>On Unix</b>
 
        <ul>
-               * update your mono sources.
+               * update your mono sources. Be sure you have latest mcs.exe
+                 and .dll's, since there have been many fixes needed for
+                 compilation on Linux.
 
-               * get the .dll's and mcs.exe built on windows, and put them on your
-                 linux machine.
+               * compile System.Data.dll:
 
-               * compile the test program along with the System.Data.Common and
-                 System.Data.SqlClient files.
+                       cd mcs/class/System.Data
+                       mcs --target library -o System.Data.dll @list
+       </ul>
+
+       <b>On Windows</b>
+
+       <ul>
+               * update your mono sources. Be sure you have latest mcs.exe
+                 and .dll's.  You can use the same method as Linux, or you can use NAnt.
+
+               * To use NAnt:
+
+                       cd mcs/class/System.Data
+                       ../../nant/NAnt.exe
+                       
+                       This will automatically copy the System.Data.dll to Test.
+                       If you need to do a clean for the System.Data.dll assembly,
+                       cd mcs/class/System.Data and run ../../nant/NAnt.exe clean
        </ul>
 
 * Testing
 
-       In order to test System.Data.SqlClient, you will need to have
+       <p>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 is easy to install 
-       using the Cygwin install program, not difficult to setup after
+               
+       <p>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,
+               
+       <p>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).
+       
+       <p>The System.Data tests use this connection string to connect
+       to the PostgreSQL database named "test" at host "localhost" as
+       user "postgres".
 
-       Installation instructions for PostgreSQL DBMS:
+<pre>
+"host=localhost;dbname=test;user=postgres"
+</pre>
+               
+       <p>Installation instructions for PostgreSQL DBMS:
 
-       <b>On Linux</b>
+       <b>On Unix</b>
 
        <ul>
-               * TODO
+               * Read the PostgreSQL Installation Instructions 
+               at \usr\doc\postgresql-x.x.x\html\installation.html
+               
+               * Depending on your Unix system, 
+               PostgreSQL maybe already installed, a database user 'postgres' created, 
+               a linux user 'postgres' created and initdb ran.  Or maybe not.
+
+<pre>
+ su\r
+ adduser postgres\r
+ mkdir /usr/local/pgsql/data\r
+ chown postgres /usr/local/pgsql/data\r
+ su - postgres\r
+ initdb -D /usr/local/pgsql/data\r
+ postmaster -i -D /usr/local/pgsql/data >logfile 2>&1 &\r
+ createdb test\r
+ psql test
+</pre>
+       
+               * Make sure you have a database user named postgres.  It is best to install
+               the PostgreSQL DBMS under linux user postgres.  When you run the postmaster,
+               run it under the user postgres as well.  If this was not done, then you
+               will need to create a user named postgres for the System.Data tests.
+
+               * If you already installed PostgeSQL and you do not have a database
+               user named postgres, then you can create user postgres using psql:
+               
+<pre>          
+psql test
+create user postgres with password 'fun2db';
+</pre>
+                               
+               * The postmaster must be run with -i option.
+               
+               * In the /usr/local/pgsql/data/pg_hba.conf file, you need
+               to have the AUTH_TYPE set to md5.  You can read more on this at
+               /usr/doc/postgresql-7.2.1/html/client-authentication.html or wherever your
+               PostgreSQL html docs are located.  See the 2nd line below,
+               host 127.0.0.1 has an AUTH_TYPE md5 in pg_hba.conf.
+               
+<pre>
+ # TYPE     DATABASE    IP_ADDRESS    MASK               AUTH_TYPE  AUTH_ARGUMENT
+
+ local      all                                          trust
+ host       all         127.0.0.1     255.255.255.255    md5
+</pre>
+
+       * If you can not find your PostgreSQL documentation locally or you 
+       did not install it, then you 
+       can get it <a href="http://www.postgresql.org/idocs/">here</a>.
 
-               * It easier to install PostgreSQL on Linux than Windows.  
        </ul>
 
        <b>On Windows</b>
 
        <ul>
-               * Use the cygwin installer to install the PostgreSQL DBMS.  It is
+               * Use the <a href="http://www.cygwin.com/">Cygwin</a> installer to install the PostgreSQL DBMS.  It is
                  found in the database category.
                  
-               * Read the file postgres-x.x.README at /usr/doc/Cygwin and read 
+               * <p>Read the file postgres-x.x.README at /usr/doc/Cygwin and read 
                  the requirements to install PostgreSQL.  Those requirements
                  are included with cygwin except cygipc.  A default installtion
                  of cygwin does not install everything you will need, so on the 
                  safe side, just include everything when installing cygwin.
                
-                 The -x.x in postgres-x.x is the version of your PostgreSQL DBMS.
+               * <p>The -x.x in postgres-x.x is the version of your PostgreSQL DBMS.
                
-               * Once cygwin has installed PostgreSQL on your computer,
+               * <p>Once Cygwin has installed the PostgreSQL DBMS on your computer,
                  read the file FAQ_MSWIN which is available 
-                 in /usr/doc/postgres-x.x\FAQ_MSWIN
-                 
-                 The -x.x in postgres-x.x is the version of your PostgreSQL DBMS.
-                 
-                 Important notes from this file are:
+                 in /usr/doc/postgres-x.x 
+                                 
+               * <p>Important notes from this file are:
                  
-                       * Point 2. - Install the latest cygipc package, 
-                         available at
-                         http://www.neuro.gatech.edu/users/cwilson/cygutils/V1.1/cygipc/
+                 <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>The cygipc package contains the ipc-daemon you will need 
+                               to run before you can
+                               run the PostgreSQL DBMS Server daemon (postmaster) or run
+                               initdb which initializes the PostgreSQL database.
                          
-                         The cygipc package contains the ipc-daemon you will need 
-                         to run before you can
-                         run the PostgreSQL DBMS Server daemon (postmaster) or run
-                         initdb which initializes the PostgreSQL database.
+                               <p><b>3.</b>  The Cygwin bin directory has to be placed in 
+                               the path before the Windows program directories, 
+                               for example, C:\cygwin\bin 
                          
-                       * Point 3.  The Cygwin bin directory has to be placed in 
-                         the path before the Windows program directories, 
-                         for example, C:\cygwin\bin 
+                               <p><b>My own note.</b>  In the Windows control panel, I set
+                               the environment variables PATH to my cygwin /usr/local/bin,
+                               /usr/bin, and /bin.  I also set my LD_LIBRARY_PATH to 
+                               /usr/local/lib and /usr/lib.  For example:
                          
-                         My own note, in the Windows control panel, I set
-                         the environment variables PATH to my cygwin /usr/local/bin,
-                         /usr/bin, and /bin.  I also set my LD_LIBRARY_PATH to 
-                         /usr/local/lib and /usr/lib.  For example:
+                               <p>
+<pre>
+PATH=c:\cygwin\usr\local\bin;c:\cygwin\usr\bin;c:\cygwin\bin;
+LD_LIBRARY_PATH=c:\cygwin\usr\local\lib;c:\cygwin\usr\lib;
+</pre>
+                                                         
+                               <p><b>4.</b> Start the ipc-daemon that came with the cygipc package.  There
+                               are two ways to do this: run it from the command line as:
                          
-                         PATH=c:\cygwin\usr\local\bin;c:\cygwin\usr\bin;c:\cygwin\bin;
-                         LD_LIBRARY_PATH=c:\cygwin\usr\local\lib;c:\cygwin\usr\lib;
+                               <p>
+<pre>
+ipc-daemon &
+</pre>                           
+                               <p>or you can set it up as a Windows service.  See the 
+                               file cygrunsrv.README at /usr/doc/Cygwin on how to do this
+                               for ipc-daemon and postmaster.  Note the
+                               troubleshooting section at the end of 
+                               the cygrunsrv.README file.
                          
-                       * Point 4. Start the ipc-daemon that came with the cygipc package.  There
-                         are two ways to do this: run it from the command line as:
-                               ipc-daemon &
-                               
-                         or you can set it up as a Windows service.  See the 
-                         file cygrunsrv.README at /usr/doc/Cygwin on how to do this
-                         for ipc-daemon and postmaster.  Note the
-                         troubleshooting section at the end of 
-                         the cygrunsrv.README file.
+                               <p>To install ipc-daemon as a service, 
+                               you just have to run
+                         
+                               <p>
+<pre>
+ipc-daemon --install-as-service' (--remove-as-service) 
+</pre>
+                         
+                               <p>and then run
                          
-                         To install ipc-daemon as a service, 
-                         you just have to run 'ipc-daemon --install-as-service' (--remove-as-service) 
-                         and then run 'net start ipc-daemon'             
+<pre>
+net start ipc-daemon
+</pre>
+                       </ul>
                          
-               Read the installation.html file 
-                 at /usr/doc/postgresql-x.x/html/installation.html
+                       <p>Read the installation.html file 
+                       at /usr/doc/postgresql-x.x/html/installation.html
                
-                 In this file, you will run the following commands:
+                       <p>You will see in this file that you will need to 
+                       run the following commands:
                  
-                       * mkdir /usr/local/pgsql/data\r
-                       * initdb -D /usr/local/pgsql/data\r
-                       * postmaster -D /usr/local/pgsql/data >logfile 2>&1 &\r
-                       * createdb test\r
-                       * psql test             
-                         
-                 When you need to connect to the database, 
-                 you will need ipc-daemon and postmaster running.  Start ipc-daemon
-                 before any of the command above.  
+                       <p>
+<pre>
+mkdir /usr/local/pgsql/data\r
+initdb -D /usr/local/pgsql/data\r
+postmaster -D /usr/local/pgsql/data >logfile 2>&1 &\r
+createdb test\r
+psql test              
+</pre>
+                 
+                       <p>When you need to connect to the database, 
+                       you will need ipc-daemon and postmaster running.  Start ipc-daemon
+                       before any of the command above.  
                  
-                 psql is a command-line PostgreSQL client tool to 
-                 enter and run SQL commands and queries.
+                       <p>psql is a command-line PostgreSQL client tool to 
+                       enter and run SQL commands and queries.
                  
-                 If there is no database user named postgres, create a user named
-                 postgres with the following SQL command in the client tool psql:
-                       plsql test
-                       create user postgres with password 'fun2db';
-                 The only reason I say this is so you can easily use the System.Data tests
-                 without having to change the database, userid, etc.
+                       <p>If there is no database user named postgres, create a user named
+                       postgres with the following SQL command in the client tool psql:
                  
+                       <p>
+<pre>
+psql test
+create user postgres with password 'fun2db';
+</pre>
+                       <p>The only reason I say this is so you can easily use the System.Data tests
+                       without having to change the database, userid, etc.
        </ul>
        
-       In the path mcs/class/System.Data/Test
+       <p>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
+       
+       <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 to connect to, ie., localhost</li>
+               <li><b>user</b> username, ie., someuser</li>
+               <li><b>password</b> password, ie., mypass1234</li>
+       </ul>
        
-       dbname is the database, ie, test
-       host is the hostname of the PostgreSQL DBMS Server to connect to
-       user is the username, ie, someuser
-       password is the password, ie, mypass1234
-       
-       The connection string is in OLE-DB connection string format.  Internally,
+       <p>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"
+       <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:
-    mcs PostgresTest.cs -r System.Data
     
+    <p>
+<pre>
+mcs PostgresTest.cs -r System.Data.dll
+</pre>
+    
+    <p>
     To run using mint, do:
-    mint PostgresTest.exe
     
-    To run using mono, do:
-    mono PostgresTest.exe
+    <p>
+<pre>
+mint PostgresTest.exe
+</pre>
     
-    You should get something like:
+    <p>
+    To run using mono, do:
+<pre>
+mono PostgresTest.exe
+</pre>
     
-Administrator@DANPC ~/mono/mcs/class/System.Data/Test\r
-$ mcs PostgresTest.cs -r System.Data\r
+    <p>You should get something like:
+
+<p>
+<pre>   
+ danmorg@DANPC ~/mono/mcs/class/System.Data/Test\r
+ $ mcs PostgresTest.cs -r System.Data.dll\r
+\r
+ danmorg@DANPC ~/mono/mcs/class/System.Data/Test\r
+ $ mono PostgresTest.exe\r
+         Postgres provider specific tests...\r
+\r
+                 Drop table:\r
+ Error (don't worry about this one)SqlError:PGRES_FATAL_ERROR ERROR:  table "mono\r
+ _postgres_test" does not exist\r
+  <Stack Trace>\r
 \r
-Administrator@DANPC ~/mono/mcs/class/System.Data/Test\r
-$ mint PostgresTest.exe\r
-        Postgres provider specific tests...\r
+                 Create table with all supported types:\r
+ OK\r
+                 Insert values for all known types:\r
+ OK\r
+                 Update values:\r
+ OK\r
+                 Insert values for all known types:\r
+ OK\r
+ Aggregate: count(*)\r
+ Agg Result: 2\r
+ Aggregate: min(text_value)\r
+ Agg Result: This is a text\r
+ Aggregate: max(int4_value)\r
+ Agg Result: 1048000\r
+ Aggregate: sum(int4_value)\r
+ Agg Result: 1048003\r
+                 Select values from the database:\r
+                 Get Schema.\r
+ dt.Columns.Count: 12\r
+ * Column Name: boolean_value\r
+          MaxLength: 1\r
+          Type: System.Boolean\r
+ * Column Name: int2_value\r
+          MaxLength: 2\r
+          Type: System.Int16\r
+ * Column Name: int4_value\r
+          MaxLength: 4\r
+          Type: System.Int32\r
+ * Column Name: bigint_value\r
+          MaxLength: 8\r
+          Type: System.Int64\r
+ * Column Name: float_value\r
+          MaxLength: 4\r
+          Type: System.Single\r
+ * Column Name: double_value\r
+          MaxLength: 8\r
+          Type: System.Double\r
+ * Column Name: char_value\r
+          MaxLength: -1\r
+          Type: System.String\r
+ * Column Name: varchar_value\r
+          MaxLength: -1\r
+          Type: System.String\r
+ * Column Name: text_value\r
+          MaxLength: -1\r
+          Type: System.String\r
+ * Column Name: time_value\r
+          MaxLength: 8\r
+          Type: System.DateTime\r
+ * Column Name: date_value\r
+          MaxLength: 4\r
+          Type: System.DateTime\r
+ * Column Name: timestamp_value\r
+          MaxLength: 8\r
+          Type: System.DateTime\r
+ Row 0:\r
+     Col 0: boolean_value: False\r
+     Col 1: int2_value: 5\r
+     Col 2: int4_value: 3\r
+     Col 3: bigint_value: 9\r
+     Col 4: float_value: 3.141590\r
+     Col 5: double_value: 3.141593\r
+     Col 6: char_value: Mono.Data!\r
+     Col 7: varchar_value: It was not me!\r
+     Col 8: text_value: We got data!\r
+     Col 9: time_value: Monday, 01 January 1 21:13:14\r
+     Col 10: date_value: Tuesday, 29 February 2000 00:00:00\r
+     Col 11: timestamp_value: Sunday, 29 February 2004 14:00:11\r
+ Row 1:\r
+     Col 0: boolean_value: True\r
+     Col 1: int2_value: -22\r
+     Col 2: int4_value: 1048000\r
+     Col 3: bigint_value: 123456789012345\r
+     Col 4: float_value: 3.141590\r
+     Col 5: double_value: 3.141593\r
+     Col 6: char_value: This is a char\r
+     Col 7: varchar_value: This is a varchar\r
+     Col 8: text_value: This is a text\r
+     Col 9: time_value: Monday, 01 January 1 21:13:14\r
+     Col 10: date_value: Tuesday, 29 February 2000 00:00:00\r
+     Col 11: timestamp_value: Sunday, 29 February 2004 14:00:11\r
+ Rows: 2\r
+ Clean up...\r
+                 Drop table...\r
+ OK\r
+ RESULT: 0\r
 \r
-                Drop table:\r
-Error (don't worry about this one)\r
-                Create table with all supported types:\r
-OK\r
-                Insert values for all known types:\r
-OK\r
-                Select values from the database:\r
-                Get Schema.\r
-dt.Columns.Count: 6\r
-* Column Name: int2_value\r
-         MaxLength: 2\r
-         Type: System.Int16\r
-* Column Name: int4_value\r
-         MaxLength: 4\r
-         Type: System.Int32\r
-* Column Name: bigint_value\r
-         MaxLength: 8\r
-         Type: System.Int64\r
-* Column Name: char_value\r
-         MaxLength: -1\r
-         Type: System.String\r
-* Column Name: varchar_value\r
-         MaxLength: -1\r
-         Type: System.String\r
-* Column Name: text_value\r
-         MaxLength: -1\r
-         Type: System.String\r
-Row 0:\r
-    Col 0: int2_value - -22\r
-    Col 1: int4_value - 1048000\r
-    Col 2: bigint_value - 123456789012345\r
-    Col 3: char_value - This is a char\r
-    Col 4: varchar_value - This is a varchar\r
-    Col 5: text_value - This is a text\r
-Rows: 1\r
-Clean up...\r
-                Drop table...\r
-OK\r
+</pre>\r
 \r