private void BindParameters (OciStatementHandle statement)
{
- foreach (OracleParameter p in Parameters)
- p.Bind (statement, Connection);
+ for (int p = 0; p < Parameters.Count; p++)
+ Parameters[p].Bind (statement, Connection, (uint) p);
}
[MonoTODO]
return cmd;
}
+ internal void UpdateParameterValues ()
+ {
+ if (Parameters.Count > 0) {
+ foreach (OracleParameter parm in Parameters)
+ parm.Update (this);
+ }
+ }
+
internal void CloseDataReader ()
{
+ UpdateParameterValues ();
+
Connection.DataReader = null;
if ((behavior & CommandBehavior.CloseConnection) != 0)
Connection.Close ();
return new OracleParameter ();
}
+ internal void DeriveParameters ()
+ {
+ if (commandType != CommandType.StoredProcedure)
+ throw new InvalidOperationException (String.Format ("OracleCommandBuilder DeriveParameters only supports CommandType.StoredProcedure, not CommandType.{0}", commandType));
+
+ //OracleParameterCollection localParameters = new OracleParameterCollection (this);
+
+ throw new NotImplementedException ();
+ }
+
private int ExecuteNonQueryInternal (OciStatementHandle statement, bool useAutoCommit)
{
if (preparedStatement == null)
if (isNonQuery == true)
statement.ExecuteNonQuery (useAutoCommit);
else
- statement.ExecuteQuery ();
+ statement.ExecuteQuery (false);
+
+ UpdateParameterValues ();
int rowsAffected = statement.GetAttributeInt32 (OciAttributeType.RowCount, ErrorHandle);
if (isNonQuery == true)
ExecuteNonQueryInternal (statement, false);
else {
- statement.ExecuteQuery ();
+ statement.ExecuteQuery (false);
if (statement.Fetch ()) {
OciDefineHandle defineHandle = (OciDefineHandle) statement.Values [0];
break;
}
}
+ UpdateParameterValues ();
}
return output;
}
}
- private bool IsNonQuery (OciStatementHandle statementHandle) \r
+ private bool IsNonQuery (OciStatementHandle statementHandle)
{
// assumes Prepare() has been called prior to calling this function
AssertCommandTextIsSet ();
AssertNoDataReader ();
bool hasRows = false;
+
+ this.behavior = behavior;
if (Transaction != null)
Transaction.AttachToServiceContext ();
if (isNonQuery)
ExecuteNonQueryInternal (statement, false);
- else
- hasRows = statement.ExecuteQuery ();
+ else {
+ if ((behavior & CommandBehavior.SchemaOnly) != 0)
+ statement.ExecuteQuery (true);
+ else
+ hasRows = statement.ExecuteQuery (false);
+ }
- rd = new OracleDataReader (this, statement, hasRows);
+ rd = new OracleDataReader (this, statement, hasRows, behavior);
}
finally {
if (statement != null && rd == null)
if (isNonQuery == true)
ExecuteNonQueryInternal (statement, false);
else {
- statement.ExecuteQuery ();
+ statement.ExecuteQuery (false);
if (statement.Fetch ()) {
OciDefineHandle defineHandle = (OciDefineHandle) statement.Values [0];
}
else
output = DBNull.Value;
+ UpdateParameterValues ();
}
}
finally {
{
if (commandType == CommandType.StoredProcedure) {
StringBuilder sb = new StringBuilder ();
- if (Parameters.Count > 0)\r
- foreach (OracleParameter parm in Parameters) {\r
- if (sb.Length > 0)\r
- sb.Append (",");\r
- sb.Append (":" + parm.ParameterName);\r
- }\r
-\r
- string sql = "call " + commandText + "(" + sb.ToString() + ")";\r
+ if (Parameters.Count > 0)
+ foreach (OracleParameter parm in Parameters) {
+ if (sb.Length > 0)
+ sb.Append (",");
+ sb.Append (":" + parm.ParameterName);
+ }
+
+ string sql = "call " + commandText + "(" + sb.ToString() + ")";
statement.Prepare (sql);
}
else // Text