2002-09-28 Vladimir Vukicevic� <vladimir@pobox.com>
authorRodrigo Moya <rodrigo@mono-cvs.ximian.com>
Tue, 1 Oct 2002 22:09:43 +0000 (22:09 -0000)
committerRodrigo Moya <rodrigo@mono-cvs.ximian.com>
Tue, 1 Oct 2002 22:09:43 +0000 (22:09 -0000)
* System.Data.OleDb/OleDbConnection.cs: Close
reader properly in call to ExecuteScalar().

svn path=/trunk/mcs/; revision=7918

mcs/class/System.Data/ChangeLog
mcs/class/System.Data/System.Data.OleDb/OleDbCommand.cs
mcs/class/System.Data/System.Data.OleDb/OleDbConnection.cs
mcs/class/System.Data/System.Data.OleDb/TestOleDb.cs
mcs/class/System.Data/System.Data.OleDb/libgda.cs

index dbd62170e52d286b396624a9d839822aa6610942..56a3e3a8ab146ebb35c1563f73714ea3ebb06131 100644 (file)
@@ -1,3 +1,16 @@
+2002-09-28  Vladimir Vukicevic  <vladimir@pobox.com>
+
+       * System.Data.OleDb/OleDbConnection.cs: Close
+       reader properly in call to ExecuteScalar().
+2002-09-07  Rodrigo Moya <rodrigo@ximian.com>
+
+       * System.Data.OleDb/OleDbConnection.cs (Open): changed to use OleDb
+       connection strings, which are then converted to GDA connection
+       strings, instead of using directly GDA data source names.
+
+       * System.Data.OleDb/libgda.cs: added more needed functions.
+       
 2002-09-06  Franklin Wise <gracenote@earthlink.net>
        
        * System.Data/DataColumn.cs: More flushing out.
        * System.Data/UniqueConstraint.cs: Implemented related PrimaryKey
        helpers.
 
-       
-       
-       
-               
 2002-08-25  Rodrigo Moya <rodrigo@ximian.com>
 
        * System.Data.OleDb/OleDbTransaction.cs (OleDbTransaction): manage
index 9285bf3ab2c16b0f7604d98ced1f546cdee19150..e0c8189e299ae6063da9ceb871924189be09338d 100644 (file)
@@ -230,12 +230,12 @@ namespace System.Data.OleDb
                public int ExecuteNonQuery ()
                {
                        if (connection == null)
-                               throw new InvalidOperationException ();
+                               throw new InvalidOperationException ("connection == null");
                        if (connection.State == ConnectionState.Closed)
-                               throw new InvalidOperationException ();
+                               throw new InvalidOperationException ("State == Closed");
                        // FIXME: a third check is mentioned in .NET docs
                        if (connection.DataReader != null)
-                               throw new InvalidOperationException ();
+                               throw new InvalidOperationException ("DataReader != null");
 
                        IntPtr gdaConnection = connection.GdaConnection;
                        IntPtr gdaParameterList = parameters.GdaParameterList;
@@ -263,9 +263,9 @@ namespace System.Data.OleDb
                        GdaList glist_node;
 
                        if (connection.State != ConnectionState.Open)
-                               throw new InvalidOperationException ();
+                               throw new InvalidOperationException ("State != Open");
                        if (connection.DataReader != null)
-                               throw new InvalidOperationException ();
+                               throw new InvalidOperationException ("DataReader != null");
 
                        this.behavior = behavior;
 
@@ -304,11 +304,20 @@ namespace System.Data.OleDb
                public object ExecuteScalar ()
                {
                        if (connection.DataReader != null)
-                               throw new InvalidOperationException ();
+                               throw new InvalidOperationException ("DataReader != null");
                        
                        SetupGdaCommand ();
                        OleDbDataReader reader = ExecuteReader ();
-                       return reader.GetValue (0);
+                       if (reader == null) {
+                               return null;
+                       }
+                       if (!reader.Read ()) {
+                               reader.Close ();
+                               return null;
+                       }
+                       object o = reader.GetValue (0);
+                       reader.Close ();
+                       return o;
                }
 
                [MonoTODO]
index 7a644f9f0970e2418692ced6c7c2c3a2b2d955a9..3376920312715d3992f5aa1836f551b0ff6b4b69 100644 (file)
@@ -219,12 +219,50 @@ namespace System.Data.OleDb
 
                public void Open ()
                {
+                       string provider = "Default";
+                       string gdaCncStr = "";
+                       string[] args;
+                       int len;
+                       char [] separator = { ';' };
+                       
                        if (State == ConnectionState.Open)
                                throw new InvalidOperationException ();
 
-                       gdaConnection = libgda.gda_client_open_connection (libgda.GdaClient,
-                                                                          connectionString,
-                                                                          "", "");
+                       /* convert the connection string to its GDA equivalent */
+                       args = connectionString.Split (';');
+                       len = args.Length;
+                       for (int i = 0; i < len; i++) {
+                               string[] values = args[i].Split (separator, 2);
+                               if (values[0] == "Provider") {
+                                       if (values[1] == "SQLOLEDB")
+                                               provider = "FreeTDS";
+                                       else if (values[1] == "MSDAORA")
+                                               provider = "Oracle";
+                                       else if (values[2] == "Microsoft.Jet.OLEDB.4.0")
+                                               provider = "MS Access";
+                                       else
+                                               provider = values[2];
+                               }
+                               else if (values[0] == "Addr" || values[0] == "Address")
+                                       gdaCncStr = String.Concat (gdaCncStr, "HOST=", values[1], ";");
+                               else if (values[0] == "Database")
+                                       gdaCncStr = String.Concat (gdaCncStr, "DATABASE=", values[1], ";");
+                               else if (values[0] == "Connection Lifetime")
+                                       connectionTimeout = System.Convert.ToInt32 (values[1]);
+                               else if (values[0] == "File Name")
+                                       gdaCncStr = String.Concat (gdaCncStr, "FILENAME=", values[1], ";");
+                               else if (values[0] == "Password" || values[0] == "Pwd")
+                                       gdaCncStr = String.Concat (gdaCncStr, "PASSWORD=", values[1], ";");
+                               else if (values[0] == "User ID")
+                                       gdaCncStr = String.Concat (gdaCncStr, "USERNAME=", values[1], ";");
+                       }
+
+                       /* open the connection */
+                       System.Console.WriteLine ("Opening connection for provider " +
+                                                 provider + " with " + gdaCncStr);
+                       gdaConnection = libgda.gda_client_open_connection_from_string (libgda.GdaClient,
+                                                                                      provider,
+                                                                                      gdaCncStr);
                }
 
                [MonoTODO]
index 4defb7e4f89553d80e4c0defa3f4fdd73ec719bd..117efe4ab8d63bb5b729ea3d09f36028c8a61822 100644 (file)
@@ -11,7 +11,7 @@ namespace System.Data.OleDb.Test
                {
                        OleDbCommand cmd;
                        
-                       m_cnc = new OleDbConnection ("PostgreSQL");
+                       m_cnc = new OleDbConnection ("Provider=PostgreSQL;Addr=127.0.0.1;Database=rodrigo");
                        m_cnc.Open ();
 
                        Console.WriteLine ("Connected to:");
index 09609545fbf25b4dd87490967579e29b04505abd..81edff5f6b5e3644e84184bbbb43fe7041bd3ace 100644 (file)
@@ -199,6 +199,11 @@ namespace System.Data.OleDb
                [DllImport("gda-2")]
                public static extern IntPtr gda_client_open_connection (IntPtr client, string dsn, string username, string password);
 
+               [DllImport("gda-2")]
+               public static extern IntPtr gda_client_open_connection_from_string (IntPtr client,
+                                                                                   string provider,
+                                                                                   string cnc_string);
+
                [DllImport("gda-2")]
                public static extern bool gda_connection_is_open (IntPtr cnc);