bool designTimeVisible;
bool prepared=false;
OdbcDataReader dataReader;
- CommandBehavior behavior;
- internal IntPtr hstmt;
+ public IntPtr hstmt;
#endregion // Fields
transaction = null;
designTimeVisible = false;
dataReader = null;
- behavior = CommandBehavior.Default;
}
public OdbcCommand (string cmdText) : this ()
{
if (hstmt!=IntPtr.Zero)
{
- OdbcReturn ret=libodbc.SQLCancel(hstmt);
- libodbchelper.DisplayError("SQLCancel",ret);
+ OdbcReturn Ret=libodbc.SQLCancel(hstmt);
+ if ((Ret!=OdbcReturn.Success) && (Ret!=OdbcReturn.SuccessWithInfo)) \r
+ throw new OdbcException(new OdbcError("SQLCancel",OdbcHandleType.Stmt,hstmt));
}
else
throw new InvalidOperationException();
private void ExecSQL(string sql)
{
OdbcReturn ret;
-
- if (!prepared)
- {
+
+ if ((parameters.Count>0) && !prepared)
Prepare();
- if (Parameters.Count>0)
- Parameters.Bind(hstmt);
- }
-
+
if (prepared)
{
ret=libodbc.SQLExecute(hstmt);
- libodbchelper.DisplayError("SQLExecute",ret);
+ if ((ret!=OdbcReturn.Success) && (ret!=OdbcReturn.SuccessWithInfo)) \r
+ throw new OdbcException(new OdbcError("SQLExecute",OdbcHandleType.Stmt,hstmt));
}
else
{
ret=libodbc.SQLAllocHandle(OdbcHandleType.Stmt, Connection.hDbc, ref hstmt);
- libodbchelper.DisplayError("SQLAllocHandle(hstmt)",ret);
+ if ((ret!=OdbcReturn.Success) && (ret!=OdbcReturn.SuccessWithInfo)) \r
+ throw new OdbcException(new OdbcError("SQLAllocHandle",OdbcHandleType.Dbc,Connection.hDbc));
+
ret=libodbc.SQLExecDirect(hstmt, sql, sql.Length);
- libodbchelper.DisplayError("SQLExecDirect",ret);
+ if ((ret!=OdbcReturn.Success) && (ret!=OdbcReturn.SuccessWithInfo)) \r
+ throw new OdbcException(new OdbcError("SQLExecDirect",OdbcHandleType.Stmt,hstmt));
}
}
ExecSQL(CommandText);
- if (!prepared)
- libodbc.SQLFreeHandle( (ushort) OdbcHandleType.Stmt, hstmt);
+// if (!prepared)
+// libodbc.SQLFreeHandle( (ushort) OdbcHandleType.Stmt, hstmt);
return 0;
}
public void Prepare()
{
OdbcReturn ret=libodbc.SQLAllocHandle(OdbcHandleType.Stmt, Connection.hDbc, ref hstmt);
- libodbchelper.DisplayError("SQLAlloc(Prepare)",ret);
+ if ((ret!=OdbcReturn.Success) && (ret!=OdbcReturn.SuccessWithInfo)) \r
+ throw new OdbcException(new OdbcError("SQLAllocHandle",OdbcHandleType.Dbc,Connection.hDbc));
+
ret=libodbc.SQLPrepare(hstmt, CommandText, CommandText.Length);
- libodbchelper.DisplayError("SQLPrepare",ret);
+ if ((ret!=OdbcReturn.Success) && (ret!=OdbcReturn.SuccessWithInfo)) \r
+ throw new OdbcException(new OdbcError("SQLPrepare",OdbcHandleType.Stmt,hstmt));
+
+ int i=1;
+ foreach (OdbcParameter p in parameters)
+ {
+ p.Bind(hstmt, i);
+ i++;
+ }
+
prepared=true;
}
public OdbcDataReader ExecuteReader (CommandBehavior behavior)
{
ExecuteNonQuery();
- dataReader=new OdbcDataReader(this);
+ dataReader=new OdbcDataReader(this,behavior);
return dataReader;
}
public object ExecuteScalar ()
{
- throw new NotImplementedException ();
-// if (connection.DataReader != null)
-// throw new InvalidOperationException ();
-//
+ if (connection.DataReader != null)
+ throw new InvalidOperationException ();
+ object val;
+ OdbcDataReader reader=ExecuteReader();
+ try
+ {
+ val=reader[0];
+ }
+ finally
+ {
+ reader.Close();
+ }
+ return val;
}
[MonoTODO]