2 // System.Data.OleDb.OleDbConnection
5 // Rodrigo Moya (rodrigo@ximian.com)
6 // Tim Coleman (tim@timcoleman.com)
8 // Copyright (C) Rodrigo Moya, 2002
9 // Copyright (C) Tim Coleman, 2002
13 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
15 // Permission is hereby granted, free of charge, to any person obtaining
16 // a copy of this software and associated documentation files (the
17 // "Software"), to deal in the Software without restriction, including
18 // without limitation the rights to use, copy, modify, merge, publish,
19 // distribute, sublicense, and/or sell copies of the Software, and to
20 // permit persons to whom the Software is furnished to do so, subject to
21 // the following conditions:
23 // The above copyright notice and this permission notice shall be
24 // included in all copies or substantial portions of the Software.
26 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
27 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
28 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
29 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
30 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
31 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
32 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
35 using System.ComponentModel;
37 using System.Data.Common;
38 using System.EnterpriseServices;
40 using System.Transactions;
43 namespace System.Data.OleDb
45 [DefaultEvent ("InfoMessage")]
47 public sealed class OleDbConnection : DbConnection, ICloneable
49 public sealed class OleDbConnection : Component, ICloneable, IDbConnection
54 string connectionString;
55 int connectionTimeout;
62 public OleDbConnection ()
64 gdaConnection = IntPtr.Zero;
65 connectionTimeout = 15;
68 public OleDbConnection (string connectionString) : this ()
70 this.connectionString = connectionString;
73 #endregion // Constructors
77 [DataCategory ("Data")]
79 #if NET_1_0 || ONLY_1_1
80 [DataSysDescriptionAttribute ("Information used to connect to a Data Source.")]
82 [EditorAttribute ("Microsoft.VSDesigner.Data.ADO.Design.OleDbConnectionStringEditor, "+ Consts.AssemblyMicrosoft_VSDesigner, "System.Drawing.Design.UITypeEditor, "+ Consts.AssemblySystem_Drawing )]
83 [RecommendedAsConfigurable (true)]
84 [RefreshPropertiesAttribute (RefreshProperties.All)]
89 string ConnectionString {
91 if (connectionString == null)
93 return connectionString;
96 connectionString = value;
100 [DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Hidden)]
102 [DataSysDescriptionAttribute ("Current connection timeout value, 'Connect Timeout=X' in the ConnectionString.")]
108 int ConnectionTimeout {
110 return connectionTimeout;
114 [DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Hidden)]
116 [DataSysDescriptionAttribute ("Current data source catalog value, 'Initial Catalog=X' in the connection string.")]
124 if (gdaConnection != IntPtr.Zero
125 && libgda.gda_connection_is_open (gdaConnection)) {
126 return libgda.gda_connection_get_database (gdaConnection);
134 [BrowsableAttribute (true)]
136 [DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Hidden)]
137 [DataSysDescriptionAttribute ("Current data source, 'Data Source=X' in the connection string.")]
145 if (gdaConnection != IntPtr.Zero
146 && libgda.gda_connection_is_open (gdaConnection)) {
147 return libgda.gda_connection_get_dsn (gdaConnection);
154 [DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Hidden)]
156 [BrowsableAttribute (true)]
158 [DataSysDescriptionAttribute ("Current OLE DB provider progid, 'Provider=X' in the connection string.")]
160 public string Provider {
162 if (gdaConnection != IntPtr.Zero
163 && libgda.gda_connection_is_open (gdaConnection)) {
164 return libgda.gda_connection_get_provider (gdaConnection);
172 [DataSysDescriptionAttribute ("Version of the product accessed by the OLE DB Provider.")]
173 [DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Hidden)]
174 [BrowsableAttribute (false)]
180 string ServerVersion {
182 if (State == ConnectionState.Closed)
183 throw ExceptionHelper.ConnectionClosed ();
184 return libgda.gda_connection_get_server_version (gdaConnection);
188 [DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Hidden)]
190 [DataSysDescriptionAttribute ("The ConnectionState indicating whether the connection is open or closed.")]
192 [BrowsableAttribute (false)]
197 ConnectionState State {
199 if (gdaConnection != IntPtr.Zero) {
200 if (libgda.gda_connection_is_open (gdaConnection))
201 return ConnectionState.Open;
204 return ConnectionState.Closed;
208 internal IntPtr GdaConnection {
210 return gdaConnection;
214 #endregion // Properties
218 public new OleDbTransaction BeginTransaction ()
220 if (State == ConnectionState.Closed)
221 throw ExceptionHelper.ConnectionClosed ();
222 return new OleDbTransaction (this);
225 public new OleDbTransaction BeginTransaction (IsolationLevel isolationLevel)
227 if (State == ConnectionState.Closed)
228 throw ExceptionHelper.ConnectionClosed ();
229 return new OleDbTransaction (this, isolationLevel);
233 protected override DbTransaction BeginDbTransaction(IsolationLevel isolationLevel)
235 return BeginTransaction (isolationLevel);
238 protected override DbCommand CreateDbCommand()
240 return CreateCommand ();
243 IDbTransaction IDbConnection.BeginTransaction ()
245 return BeginTransaction ();
248 IDbTransaction IDbConnection.BeginTransaction (IsolationLevel isolationLevel)
250 return BeginTransaction (isolationLevel);
253 IDbCommand IDbConnection.CreateCommand ()
255 return CreateCommand ();
263 void ChangeDatabase (string value)
265 if (State != ConnectionState.Open)
266 throw new InvalidOperationException ();
268 if (!libgda.gda_connection_change_database (gdaConnection, value))
269 throw new OleDbException (this);
278 if (State == ConnectionState.Open) {
279 libgda.gda_connection_close (gdaConnection);
280 gdaConnection = IntPtr.Zero;
284 public new OleDbCommand CreateCommand ()
286 if (State == ConnectionState.Open)
287 return new OleDbCommand (null, this);
293 protected override void Dispose (bool disposing)
295 throw new NotImplementedException ();
299 public DataTable GetOleDbSchemaTable (Guid schema, object[] restrictions)
301 throw new NotImplementedException ();
305 object ICloneable.Clone ()
307 throw new NotImplementedException();
316 // string provider = "Default";
317 // string gdaCncStr = string.Empty;
320 // char [] separator = { ';' };
322 if (State == ConnectionState.Open)
323 throw new InvalidOperationException ();
325 libgda.gda_init ("System.Data.OleDb", "1.0", 0, new string [0]);
327 gdaConnection = libgda.gda_client_open_connection (libgda.GdaClient,
328 ConnectionString, string.Empty, string.Empty, 0);
330 if (gdaConnection == IntPtr.Zero)
331 throw new OleDbException (this);
332 /* convert the connection string to its GDA equivalent */
333 //args = connectionString.Split (';');
335 //for (int i = 0; i < len; i++) {
336 // string[] values = args[i].Split (separator, 2);
337 // if (values[0] == "Provider") {
338 // if (values[1] == "SQLOLEDB")
339 // provider = "FreeTDS";
340 // else if (values[1] == "MSDAORA")
341 // provider = "Oracle";
342 // else if (values[2] == "Microsoft.Jet.OLEDB.4.0")
343 // provider = "MS Access";
345 // provider = values[2];
347 // else if (values[0] == "Addr" || values[0] == "Address")
348 // gdaCncStr = String.Concat (gdaCncStr, "HOST=", values[1], ";");
349 // else if (values[0] == "Database")
350 // gdaCncStr = String.Concat (gdaCncStr, "DATABASE=", values[1], ";");
351 // else if (values[0] == "Connection Lifetime")
352 // connectionTimeout = System.Convert.ToInt32 (values[1]);
353 // else if (values[0] == "File Name")
354 // gdaCncStr = String.Concat (gdaCncStr, "FILENAME=", values[1], ";");
355 // else if (values[0] == "Password" || values[0] == "Pwd")
356 // gdaCncStr = String.Concat (gdaCncStr, "PASSWORD=", values[1], ";");
357 // else if (values[0] == "User ID")
358 // gdaCncStr = String.Concat (gdaCncStr, "USERNAME=", values[1], ";");
361 /* open the connection */
362 //System.Console.WriteLine ("Opening connection for provider " +
363 // provider + " with " + gdaCncStr);
364 //gdaConnection = libgda.gda_client_open_connection_from_string (libgda.GdaClient,
370 public static void ReleaseObjectPool ()
372 throw new NotImplementedException ();
376 public void EnlistDistributedTransaction (ITransaction transaction)
378 throw new NotImplementedException ();
383 public override void EnlistTransaction (Transaction transaction)
385 throw new NotImplementedException ();
389 public override DataTable GetSchema ()
391 if (State == ConnectionState.Closed)
392 throw ExceptionHelper.ConnectionClosed ();
393 throw new NotImplementedException ();
397 public override DataTable GetSchema(string collectionName)
399 return GetSchema (collectionName, null);
403 public override DataTable GetSchema (String collectionName, string [] restrictionValues)
405 if (State == ConnectionState.Closed)
406 throw ExceptionHelper.ConnectionClosed ();
407 throw new NotImplementedException ();
411 [EditorBrowsable (EditorBrowsableState.Advanced)]
412 public void ResetState ()
414 throw new NotImplementedException ();
420 #region Events and Delegates
423 [DataSysDescription ("Event triggered when messages arrive from the DataSource.")]
425 [DataCategory ("DataCategory_InfoMessage")]
426 public event OleDbInfoMessageEventHandler InfoMessage;
429 [DataSysDescription ("Event triggered when the connection changes state.")]
430 [DataCategory ("DataCategory_StateChange")]
431 public event StateChangeEventHandler StateChange;