void IComponent.Append(ref Dictionary<string, object> variables, IOutputWriter writer)
 {
     ClassQuery cq = new ClassQuery(_namespace, _query);
     List<IDbDataParameter> pars = new List<IDbDataParameter>();
     StringOutputWriter swo = new StringOutputWriter();
     foreach (string str in _parameters.Keys)
     {
         string par = "";
         foreach (IComponent ic in _parameters[str])
         {
             swo.Clear();
             ic.Append(ref variables, swo);
             par += swo.ToString();
         }
         pars.Add(cq.CreateParameter(str, par));
     }
     cq.Execute(pars.ToArray());
     object var = new ArrayList();
     while (cq.Read())
     {
         Hashtable ht = new Hashtable();
         for (int x = 0; x < cq.FieldCount; x++)
         {
             if (!cq.IsDBNull(x))
             {
                 ht.Add(cq.GetName(x), cq[x]);
             }
         }
         ((ArrayList)var).Add(ht);
     }
     cq.Close();
     if (((ArrayList)var).Count == 1 && ((Hashtable)((ArrayList)var)[0]).Count == 1)
     {
         Hashtable tmp = (Hashtable)((ArrayList)var)[0];
         var = tmp;
         object[] objAr = new object[1];
         ((Hashtable)var).Values.CopyTo(objAr, 0);
         var = objAr[0];
     }
     if (variables.ContainsKey(_variableName))
         variables.Remove(_variableName);
     variables.Add(_variableName, var);
 }