2004-03-10 Umadevi S (sumadevi@novell.com)
[mono.git] / mcs / class / System.Data / System.Data.OleDb / OleDbConnection.cs
index 94b8b208e6bcbd7cfe95471dfbe5fe05dd246c3e..a079c6f9b959a600c4b535d202bed3bf4da4e704 100644 (file)
@@ -21,8 +21,6 @@ namespace System.Data.OleDb
 
                string connectionString;
                int connectionTimeout;
-               OleDbDataReader dataReader;
-               bool dataReaderOpen;
                IntPtr gdaConnection;
 
                #endregion
@@ -63,7 +61,8 @@ namespace System.Data.OleDb
 
                public string Database { 
                        get {
-                               if (gdaConnection != IntPtr.Zero && libgda.gda_connection_is_open (gdaConnection)) {
+                               if (gdaConnection != IntPtr.Zero
+                                   && libgda.gda_connection_is_open (gdaConnection)) {
                                        return libgda.gda_connection_get_database (gdaConnection);
                                }
 
@@ -72,15 +71,20 @@ namespace System.Data.OleDb
                }
 
                public string DataSource {
-                       [MonoTODO]
                        get {
-                               throw new NotImplementedException ();
+                               if (gdaConnection != IntPtr.Zero
+                                   && libgda.gda_connection_is_open (gdaConnection)) {
+                                       return libgda.gda_connection_get_dsn (gdaConnection);
+                               }
+
+                               return null;
                        }
                }
 
                public string Provider {
                        get {
-                               if (gdaConnection != IntPtr.Zero && libgda.gda_connection_is_open (gdaConnection)) {
+                               if (gdaConnection != IntPtr.Zero
+                                   && libgda.gda_connection_is_open (gdaConnection)) {
                                        return libgda.gda_connection_get_provider (gdaConnection);
                                }
 
@@ -89,9 +93,13 @@ namespace System.Data.OleDb
                }
 
                public string ServerVersion {
-                       [MonoTODO]
                        get {
-                               throw new NotImplementedException ();
+                               if (gdaConnection != IntPtr.Zero
+                                   && libgda.gda_connection_is_open (gdaConnection)) {
+                                       return libgda.gda_connection_get_server_version (gdaConnection);
+                               }
+
+                               return null;
                        }
                }
 
@@ -113,7 +121,7 @@ namespace System.Data.OleDb
                                return gdaConnection;
                        }
                }
-
+               
                #endregion // Properties
        
                #region Methods
@@ -146,12 +154,18 @@ namespace System.Data.OleDb
 
                public void ChangeDatabase (string name)
                {
-                       // FIXME: see http://bugzilla.gnome.org/show_bug.cgi?id=83315
+                       if (gdaConnection == IntPtr.Zero)
+                               throw new ArgumentException ();
+                       if (State != ConnectionState.Open)
+                               throw new InvalidOperationException ();
+
+                       if (!libgda.gda_connection_change_database (gdaConnection, name))
+                               throw new OleDbException (this);
                }
 
                public void Close ()
                {
-                       if (gdaConnection != IntPtr.Zero) {
+                       if (State == ConnectionState.Open) {
                                libgda.gda_connection_close (gdaConnection);
                                gdaConnection = IntPtr.Zero;
                        }
@@ -159,7 +173,7 @@ namespace System.Data.OleDb
 
                public OleDbCommand CreateCommand ()
                {
-                       if (gdaConnection != IntPtr.Zero && libgda.gda_connection_is_open (gdaConnection))
+                       if (State == ConnectionState.Open)
                                return new OleDbCommand (null, this);
 
                        return null;
@@ -190,12 +204,54 @@ 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,
-                                                                          "", "");
+                                                                          connectionString,
+                                                                          "", "", 0);
+                       
+                       /* 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]
@@ -204,28 +260,6 @@ namespace System.Data.OleDb
                        throw new NotImplementedException ();
                }
 
-               #endregion
-
-               #region Internal Methods
-
-               // Used to prevent OleDbConnection
-               // from doing anything while
-               // OleDbDataReader is open.
-               // Open the Reader. (called from OleDbCommand)
-               internal void OpenReader (OleDbDataReader reader)
-               {
-                       if(dataReaderOpen == true) {
-                               // TODO: throw exception here?
-                               //       because a reader
-                               //       is already open
-                       }
-                       else {
-                               dataReader = reader;
-                               dataReaderOpen = true;
-                       }
-               }
-
-
                #endregion
 
                #region Events and Delegates