def _buildADOparameterList(self, parameters, sproc=False): self.parameters = parameters if parameters is None: parameters = [] parameters_known = False if sproc: # needed only if we are calling a stored procedure try: # attempt to use ADO's parameter list self.cmd.Parameters.Refresh() if verbose > 2: print 'ADO detected Params=', format_parameters( self.cmd.Parameters, True) print 'Program Parameters=', repr(parameters) parameters_known = True except api.Error: if verbose: print 'ADO Parameter Refresh failed' pass else: if len(parameters) != self.cmd.Parameters.Count - 1: raise api.ProgrammingError('You must supply %d parameters for this stored procedure' % \ (self.cmd.Parameters.Count - 1)) if sproc or parameters != []: i = 0 if parameters_known: # use ado parameter list if self._parameter_names: # named parameters for i, pm_name in enumerate(self._parameter_names): p = getIndexedValue(self.cmd.Parameters, i) try: _configure_parameter(p, parameters[pm_name], p.Type, parameters_known) except (Exception), e: _message = u'Error Converting Parameter %s: %s, %s <- %s\n' % \ (p.Name, adc.ado_type_name(p.Type), p.Value, repr(parameters[pm_name])) self._raiseCursorError( api.DataError, _message + '->' + repr(e.args)) else: # regular sequence of parameters for value in parameters: p = getIndexedValue(self.cmd.Parameters, i) if p.Direction == adc.adParamReturnValue: # this is an extra parameter added by ADO i += 1 # skip the extra p = getIndexedValue(self.cmd.Parameters, i) try: _configure_parameter(p, value, p.Type, parameters_known) except (Exception), e: _message = u'Error Converting Parameter %s: %s, %s <- %s\n' % \ (p.Name, adc.ado_type_name(p.Type), p.Value, repr(value)) self._raiseCursorError( api.DataError, _message + '->' + repr(e.args)) i += 1
recordset = rsTuple[0] if recordset is None: return None self.build_column_info(recordset) return True def setinputsizes(self, sizes): pass def setoutputsize(self, size, column=None): pass def _last_query( self): # let the programmer see what query we actually used try: if self.parameters == None: ret = self.cmd.CommandText else: ret = "%s,parameters=%s" % (self.cmd.CommandText, repr(self.parameters)) except: ret = None return ret query = property(_last_query, None, None, "returns the last query executed") if __name__ == '__main__': raise api.ProgrammingError(version + ' cannot be run as a main program.')
def _buildADOparameterList(self, parameters, sproc=False): self.parameters = parameters if parameters is None: parameters = [] parameters_known = False if sproc: # needed only if we are calling a stored procedure try: # attempt to use ADO's parameter list self.cmd.Parameters.Refresh() if verbose > 2: print('ADO detected Params=', format_parameters(self.cmd.Parameters, True)) print('Program Parameters=', repr(parameters)) parameters_known = True except api.Error: if verbose: print('ADO Parameter Refresh failed') pass else: if len(parameters) != self.cmd.Parameters.Count - 1: raise api.ProgrammingError('You must supply %d parameters for this stored procedure' % \ (self.cmd.Parameters.Count - 1)) if sproc or parameters != []: i = 0 if parameters_known: # use ado parameter list if self._parameter_names: # named parameters for i, pm_name in enumerate(self._parameter_names): p = getIndexedValue(self.cmd.Parameters, i) try: _configure_parameter(p, parameters[pm_name], p.Type, parameters_known) except (Exception) as e: _message = 'Error Converting Parameter %s: %s, %s <- %s\n' % \ (p.Name, adc.ado_type_name(p.Type), p.Value, repr(parameters[pm_name])) self._raiseCursorError( api.DataError, _message + '->' + repr(e.args)) else: # regular sequence of parameters for value in parameters: p = getIndexedValue(self.cmd.Parameters, i) if p.Direction == adc.adParamReturnValue: # this is an extra parameter added by ADO i += 1 # skip the extra p = getIndexedValue(self.cmd.Parameters, i) try: _configure_parameter(p, value, p.Type, parameters_known) except (Exception) as e: _message = 'Error Converting Parameter %s: %s, %s <- %s\n' % \ (p.Name, adc.ado_type_name(p.Type), p.Value, repr(value)) self._raiseCursorError( api.DataError, _message + '->' + repr(e.args)) i += 1 else: #-- build own parameter list if self._parameter_names: # we expect a dictionary of parameters, this is the list of expected names for parm_name in self._parameter_names: elem = parameters[parm_name] adotype = api.pyTypeToADOType(elem) p = self.cmd.CreateParameter(parm_name, adotype, adc.adParamInput) _configure_parameter(p, elem, adotype, parameters_known) try: self.cmd.Parameters.Append(p) except (Exception) as e: _message = 'Error Building Parameter %s: %s, %s <- %s\n' % \ (p.Name, adc.ado_type_name(p.Type), p.Value, repr(elem)) self._raiseCursorError( api.DataError, _message + '->' + repr(e.args)) else: # expecting the usual sequence of parameters if sproc: p = self.cmd.CreateParameter('@RETURN_VALUE', adc.adInteger, adc.adParamReturnValue) self.cmd.Parameters.Append(p) for elem in parameters: name = 'p%i' % i adotype = api.pyTypeToADOType(elem) p = self.cmd.CreateParameter( name, adotype, adc.adParamInput ) # Name, Type, Direction, Size, Value _configure_parameter(p, elem, adotype, parameters_known) try: self.cmd.Parameters.Append(p) except (Exception) as e: _message = 'Error Building Parameter %s: %s, %s <- %s\n' % \ (p.Name, adc.ado_type_name(p.Type), p.Value, repr(elem)) self._raiseCursorError( api.DataError, _message + '->' + repr(e.args)) i += 1 if self._ado_prepared == 'setup': self._ado_prepared = True # parameters will be known next loop