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 string CommandText
{
- get { return commandText; }
+ get {
+ return commandText;
+ }
set {
commandText = value;
}
}
public int CommandTimeout {
- get { return timeout; }
- set { timeout = value; }
+ get {
+ return timeout;
+ }
+ set {
+ timeout = value;
+ }
}
public CommandType CommandType {
- get { return commandType; }
- set { commandType = value; }
+ get {
+ return commandType;
+ }
+ set {
+ commandType = value;
+ }
}
public OleDbConnection Connection {
- get { return connection; }
- set { connection = value; }
+ get {
+ return connection;
+ }
+ set {
+ connection = value;
+ }
}
public bool DesignTimeVisible {
- get { return designTimeVisible; }
- set { designTimeVisible = value; }
+ get {
+ return designTimeVisible;
+ }
+ set {
+ designTimeVisible = value;
+ }
}
public OleDbParameterCollection Parameters {
- get { return parameters; }
- set { parameters = value; }
+ get {
+ return parameters;
+ }
+ set {
+ parameters = value;
+ }
}
public OleDbTransaction Transaction {
- get { return transaction; }
- set { transaction = value; }
+ get {
+ return transaction;
+ }
+ set {
+ transaction = value;
+ }
}
public UpdateRowSource UpdatedRowSource {
[MonoTODO]
- get { throw new NotImplementedException (); }
+ get {
+ throw new NotImplementedException ();
+ }
[MonoTODO]
- set { throw new NotImplementedException (); }
+ set {
+ throw new NotImplementedException ();
+ }
}
IDbConnection IDbCommand.Connection {
- get { return Connection; }
- set { Connection = (OleDbConnection) value; }
+ get {
+ return Connection;
+ }
+ set {
+ Connection = (OleDbConnection) value;
+ }
}
IDataParameterCollection IDbCommand.Parameters {
- get { return Parameters; }
+ get {
+ return Parameters;
+ }
}
IDbTransaction IDbCommand.Transaction {
- get { return Transaction; }
- set { Transaction = (OleDbTransaction) value; }
+ get {
+ return Transaction;
+ }
+ set {
+ Transaction = (OleDbTransaction) value;
+ }
}
#endregion // Properties
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;
IntPtr gdaParameterList = parameters.GdaParameterList;
SetupGdaCommand ();
- return libgda.gda_connection_execute_non_query (gdaConnection, (IntPtr) gdaCommand, gdaParameterList);
+ return libgda.gda_connection_execute_non_query (gdaConnection,
+ (IntPtr) gdaCommand,
+ gdaParameterList);
}
public OleDbDataReader ExecuteReader ()
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;
- /* 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 ();
+ /* execute the command */
+ SetupGdaCommand ();
+ 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;
}
return ExecuteReader (behavior);
}
- [MonoTODO]
public object ExecuteScalar ()
{
- throw new NotImplementedException ();
+ SetupGdaCommand ();
+ OleDbDataReader reader = ExecuteReader ();
+ if (reader == null) {
+ return null;
+ }
+ if (!reader.Read ()) {
+ reader.Close ();
+ return null;
+ }
+ object o = reader.GetValue (0);
+ reader.Close ();
+ return o;
}
[MonoTODO]
}
#endregion
-
- #region Internal Methods
-
- // only meant to be used between OleDbConnection,
- // OleDbCommand, and OleDbDataReader
- internal void OpenReader (OleDbDataReader reader)
- {
- connection.OpenReader (reader);
- }
-
- #endregion
-
}
}