+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
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;
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;
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]
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]
{
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:");
[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);