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
12 using System.ComponentModel;
14 using System.Data.Common;
15 using System.EnterpriseServices;
17 namespace System.Data.OleDb
19 [DefaultEvent ("InfoMessage")]
20 public sealed class OleDbConnection : Component, ICloneable, IDbConnection
24 string connectionString;
25 int connectionTimeout;
32 public OleDbConnection ()
34 libgda.gda_init ("System.Data.OleDb", "1.0", 0, new string [0]);
35 gdaConnection = IntPtr.Zero;
36 connectionTimeout = 15;
37 connectionString = null;
40 public OleDbConnection (string connectionString) : this ()
42 this.connectionString = connectionString;
45 #endregion // Constructors
49 [DataCategory ("Data")]
51 [DataSysDescriptionAttribute ("Information used to connect to a Data Source")]
52 [EditorAttribute ("Microsoft.VSDesigner.Data.ADO.Design.OleDbConnectionStringEditor, "+ Consts.AssemblyMicrosoft_VSDesigner, "System.Drawing.Design.UITypeEditor, "+ Consts.AssemblySystem_Drawing )]
53 [RecommendedAsConfigurableAttribute (true)]
54 [RefreshPropertiesAttribute (RefreshProperties.All)]
55 public string ConnectionString {
57 return connectionString;
60 connectionString = value;
64 [DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Hidden)]
65 [DataSysDescriptionAttribute ("Current connection timeout value 'Connect TimeOut=X' in the ConnectionString")]
66 public int ConnectionTimeout {
68 return connectionTimeout;
72 [DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Hidden)]
73 [DataSysDescriptionAttribute ("Current data source Catlog value, 'Initial Catalog=X' in the ConnectionString")]
74 public string Database {
76 if (gdaConnection != IntPtr.Zero
77 && libgda.gda_connection_is_open (gdaConnection)) {
78 return libgda.gda_connection_get_database (gdaConnection);
85 [DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Hidden)]
86 [DataSysDescriptionAttribute ("Current data source, 'Data Source=X' in the ConnectionString")]
87 public string DataSource {
89 if (gdaConnection != IntPtr.Zero
90 && libgda.gda_connection_is_open (gdaConnection)) {
91 return libgda.gda_connection_get_dsn (gdaConnection);
98 [DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Hidden)]
99 [DataSysDescriptionAttribute ("Current OLE DB provider progid, 'Provider=X' in the ConnectionString")]
100 public string Provider {
102 if (gdaConnection != IntPtr.Zero
103 && libgda.gda_connection_is_open (gdaConnection)) {
104 return libgda.gda_connection_get_provider (gdaConnection);
111 [DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Hidden)]
112 [DataSysDescriptionAttribute ("Version of the product accessed by the OLE DB Provider")]
113 [BrowsableAttribute (false)]
114 public string ServerVersion {
116 if (gdaConnection != IntPtr.Zero
117 && libgda.gda_connection_is_open (gdaConnection)) {
118 return libgda.gda_connection_get_server_version (gdaConnection);
125 [DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Hidden)]
126 [DataSysDescriptionAttribute ("The ConnectionState indicating whether the connection is open or closed")]
127 [BrowsableAttribute (false)]
128 public ConnectionState State
131 if (gdaConnection != IntPtr.Zero) {
132 if (libgda.gda_connection_is_open (gdaConnection))
133 return ConnectionState.Open;
136 return ConnectionState.Closed;
140 internal IntPtr GdaConnection
143 return gdaConnection;
147 #endregion // Properties
151 public OleDbTransaction BeginTransaction ()
153 if (gdaConnection != IntPtr.Zero)
154 return new OleDbTransaction (this);
159 IDbTransaction IDbConnection.BeginTransaction ()
161 return BeginTransaction ();
164 public OleDbTransaction BeginTransaction (IsolationLevel level)
166 if (gdaConnection != IntPtr.Zero)
167 return new OleDbTransaction (this, level);
172 IDbTransaction IDbConnection.BeginTransaction (IsolationLevel level)
174 return BeginTransaction (level);
177 public void ChangeDatabase (string name)
179 if (gdaConnection == IntPtr.Zero)
180 throw new ArgumentException ();
181 if (State != ConnectionState.Open)
182 throw new InvalidOperationException ();
184 if (!libgda.gda_connection_change_database (gdaConnection, name))
185 throw new OleDbException (this);
190 if (State == ConnectionState.Open) {
191 libgda.gda_connection_close (gdaConnection);
192 gdaConnection = IntPtr.Zero;
196 public OleDbCommand CreateCommand ()
198 if (State == ConnectionState.Open)
199 return new OleDbCommand (null, this);
205 protected override void Dispose (bool disposing)
207 throw new NotImplementedException ();
211 public DataTable GetOleDbSchemaTable (Guid schema, object[] restrictions)
213 throw new NotImplementedException ();
217 object ICloneable.Clone ()
219 throw new NotImplementedException();
222 IDbCommand IDbConnection.CreateCommand ()
224 return CreateCommand ();
229 string provider = "Default";
230 string gdaCncStr = "";
233 char [] separator = { ';' };
235 if (State == ConnectionState.Open)
236 throw new InvalidOperationException ();
238 gdaConnection = libgda.gda_client_open_connection (libgda.GdaClient,
242 /* convert the connection string to its GDA equivalent */
243 //args = connectionString.Split (';');
245 //for (int i = 0; i < len; i++) {
246 // string[] values = args[i].Split (separator, 2);
247 // if (values[0] == "Provider") {
248 // if (values[1] == "SQLOLEDB")
249 // provider = "FreeTDS";
250 // else if (values[1] == "MSDAORA")
251 // provider = "Oracle";
252 // else if (values[2] == "Microsoft.Jet.OLEDB.4.0")
253 // provider = "MS Access";
255 // provider = values[2];
257 // else if (values[0] == "Addr" || values[0] == "Address")
258 // gdaCncStr = String.Concat (gdaCncStr, "HOST=", values[1], ";");
259 // else if (values[0] == "Database")
260 // gdaCncStr = String.Concat (gdaCncStr, "DATABASE=", values[1], ";");
261 // else if (values[0] == "Connection Lifetime")
262 // connectionTimeout = System.Convert.ToInt32 (values[1]);
263 // else if (values[0] == "File Name")
264 // gdaCncStr = String.Concat (gdaCncStr, "FILENAME=", values[1], ";");
265 // else if (values[0] == "Password" || values[0] == "Pwd")
266 // gdaCncStr = String.Concat (gdaCncStr, "PASSWORD=", values[1], ";");
267 // else if (values[0] == "User ID")
268 // gdaCncStr = String.Concat (gdaCncStr, "USERNAME=", values[1], ";");
271 /* open the connection */
272 //System.Console.WriteLine ("Opening connection for provider " +
273 // provider + " with " + gdaCncStr);
274 //gdaConnection = libgda.gda_client_open_connection_from_string (libgda.GdaClient,
280 public static void ReleaseObjectPool ()
282 throw new NotImplementedException ();
286 public void EnlistDistributedTransaction (ITransaction transaction)
288 throw new NotImplementedException ();
293 #region Events and Delegates
295 [DataSysDescription ("DbConnection_InfoMessage")]
296 [DataCategory ("DataCategory_InfoMessage")]
297 public event OleDbInfoMessageEventHandler InfoMessage;
299 [DataSysDescription ("DbConnection_StateChange")]
300 [DataCategory ("DataCategory_StateChange")]
301 public event StateChangeEventHandler StateChange;