using System.Data;
using System.Data.Common;
using System.Collections;
+using System.Runtime.InteropServices;
namespace System.Data.OleDb
{
gdaCommand = IntPtr.Zero;
}
- public OleDbCommand (string cmdText)
- : this ()
+ public OleDbCommand (string cmdText) : this ()
{
CommandText = cmdText;
}
Connection = connection;
}
- public OleDbCommand (string cmdText, OleDbConnection connection, OleDbTransaction transaction)
- : this (cmdText, connection)
+ public OleDbCommand (string cmdText,
+ OleDbConnection connection,
+ OleDbTransaction transaction) : this (cmdText, connection)
{
this.transaction = transaction;
}
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
IntPtr gdaConnection = connection.GdaConnection;
public OleDbDataReader ExecuteReader (CommandBehavior behavior)
{
ArrayList results = new ArrayList ();
+ IntPtr rs_list;
+ GdaList glist_node;
if (connection.State != ConnectionState.Open)
- throw new InvalidOperationException ();
+ throw new InvalidOperationException ("State != Open");
this.behavior = behavior;
IntPtr gdaConnection = connection.GdaConnection;
IntPtr gdaParameterList = parameters.GdaParameterList;
+ /* execute the command */
SetupGdaCommand ();
- /* FIXME: split all returned resultsets into the array
- list of results */
- results.Add (libgda.gda_connection_execute_command (
- gdaConnection,
- gdaCommand,
- gdaParameterList));
-
- dataReader = new OleDbDataReader (this, results);
- dataReader.NextResult ();
+ rs_list = libgda.gda_connection_execute_command (
+ gdaConnection,
+ gdaCommand,
+ gdaParameterList);
+ if (rs_list != IntPtr.Zero) {
+ glist_node = (GdaList) Marshal.PtrToStructure (rs_list, typeof (GdaList));
+
+ while (glist_node != null) {
+ results.Add (glist_node.data);
+ if (glist_node.next == IntPtr.Zero)
+ break;
+
+ glist_node = (GdaList) Marshal.PtrToStructure (glist_node.next,
+ typeof (GdaList));
+ }
+ dataReader = new OleDbDataReader (this, results);
+ dataReader.NextResult ();
+ }
return dataReader;
}
{
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]