code: def execute_prepared(self, prepared_statement, multi_row_parameters):
          
          self._check_closed()
  
          # Convert parameters into a generator producing lists with parameters as named tuples (incl. some meta data):
          parameters = prepared_statement.prepare_parameters(multi_row_parameters)
  
          while parameters:
              request = RequestMessage.new(
                  self.connection,
                  RequestSegment(
                      message_types.EXECUTE,
                      (StatementId(prepared_statement.statement_id),
                       Parameters(parameters))
                  )
              )
              reply = self.connection.send_request(request)
  
              parts = reply.segments[0].parts
              function_code = reply.segments[0].function_code
              if function_code == function_codes.SELECT:
                  self._handle_select(parts, prepared_statement.result_metadata_part)
              elif function_code in function_codes.DML:
                  self._handle_upsert(parts, request.segments[0].parts[1].unwritten_lobs)
              elif function_code == function_codes.DDL:
                  # No additional handling is required
                  pass
              elif function_code in (function_codes.DBPROCEDURECALL, function_codes.DBPROCEDURECALLWITHRESULT):
                  self._handle_dbproc_call(parts, prepared_statement._params_metadata) # resultset metadata set in prepare
              else:
                  raise InterfaceError("Invalid or unsupported function code received: %d" % function_code)
docs: :param prepared_statement: A PreparedStatement instance
          :param multi_row_parameters: A list/tuple containing list/tuples of parameters (for multiple rows)