function edb_executeQuery(dbName, commandName, params, showErrors) {
  var requester = getHTTPObject();
  var paramStr = '';
  
  if (params != null)
    for (var i = 1; i <= params.length; i++) paramStr += '&sqlParam_' + i + '=' + encodeURIComponent(params[i - 1]);
  
  var rString = globalContextPath + '/ExternalDatabaseActionXML.do' + globalActionPostfix + '?dbName=' + dbName +
                                                                                            '&commandName=' + commandName +
                                                                                           paramStr;                                                                                 
  requester.open("GET", rString, false);
  requester.send(null);

  if (requester.responseXML.normalize) requester.responseXML.normalize();

  var err = requester.responseXML.getElementsByTagName('errorMessage');
  var rs = null;
  
  if (err != null && err.length > 0) {
    if (showErrors) alert(err[0].childNodes[0].nodeValue);
    
    rs = new Object();
    rs.rows = null;
    rs.size = -1;
    rs.columnCount = -1;
    
    rs.isError = true;
    rs.errorMessage = err[0].childNodes[0].nodeValue;
  } else {
    var rows = requester.responseXML.getElementsByTagName('rs_row');
    var size = requester.responseXML.getElementsByTagName('rs_size');
    var ccount = requester.responseXML.getElementsByTagName('rs_columnCount');
    
    rs = new Object();
    rs.rows = new Array();
    rs.size = 0;
    rs.columnCount = 0;
    
    rs.isError = false;
    rs.errorMessage = null;
    
    if (size != null && size.length > 0 && size[0].childNodes != null && size[0].childNodes.length > 0) {
      rs.size = size[0].childNodes[0].nodeValue;
      rs.columnCount = ccount[0].childNodes[0].nodeValue;

      if (rows != null && rows.length > 0)  
        for (var i = 0; i < rows.length; i++) {
          var cols = rows[i].getElementsByTagName('rs_col');
          
          var res = new Array();
          if (cols != null && cols.length > 0)
            for (var j = 0; j < cols.length; j++)
              if (cols[j] != null && cols[j].childNodes != null && cols[j].childNodes.length > 0)
                res[j] = cols[j].childNodes[0].nodeValue;
              else
                res[j] = '';
                
          rs.rows[i] = res;
        }
    }
  }

  return rs;
}

