private void CleanUp() { if (_currentReader != null) { // we must preserve statement object until we have an associated reader object that might access it. return; } if (Connection != null) { ((AbstractDBConnection)Connection).RemoveReference(this); } if (_statement != null) { _statement.close(); _statement = null; } IsCommandPrepared = false; _internalParameters = null; _currentResultSet = null; }
private void PrepareInternal() { if ((Connection == null) || (Connection.State != ConnectionState.Open)) { throw ExceptionHelper.ConnectionNotOpened("Prepare",(Connection != null) ? Connection.State.ToString() : ""); } if (IsCommandPrepared) { // maybe we have to prepare the command again bool hasNullParameters = false; for(int i = 0; (i < Parameters.Count) && !hasNullParameters; i++) { AbstractDbParameter parameter = (AbstractDbParameter)Parameters[i]; if (IsNullParameter(parameter)) { // if we still have null parameters - have to prepare agail IsCommandPrepared = false; hasNullParameters = true; } } if (!NullParametersInPrepare && hasNullParameters) { // if we prepeared using null parameters and now there is no null parameters - need to prepare again IsCommandPrepared = false; } } if (!IsCommandPrepared) { _javaCommandText = PrepareCommandTextAndParameters(); java.sql.Connection jdbcCon = _connection.JdbcConnection; // For SchemaOnly we just prepare statement (for future use in GetSchemaTable) if (Behavior == CommandBehavior.SchemaOnly) { if (CommandType == CommandType.StoredProcedure) _statement = jdbcCon.prepareCall(_javaCommandText); else _statement = jdbcCon.prepareStatement(_javaCommandText); return; } if (CommandType == CommandType.StoredProcedure) _statement = jdbcCon.prepareCall(_javaCommandText); else { int internalParametersCount = InternalParameters.Count; if ( internalParametersCount > 0) { bool hasOnlyInputParameters = true; for(int i=0; i < internalParametersCount; i++) { AbstractDbParameter internalParameter = (AbstractDbParameter)InternalParameters[i]; if (IsNullParameter(internalParameter)) { NullParametersInPrepare = true; } if ((internalParameter.Direction & ParameterDirection.Output) != 0){ hasOnlyInputParameters = false; } } if (hasOnlyInputParameters) { _statement = jdbcCon.prepareStatement(_javaCommandText); } else { _statement = jdbcCon.prepareCall(_javaCommandText); } } else { if (_explicitPrepare) { _statement = jdbcCon.prepareStatement(_javaCommandText); } else { _statement = jdbcCon.createStatement(); } } } IsCommandPrepared = true; } }