3 using System.Collections.Generic;
4 using System.ComponentModel;
10 namespace Sage.
ES.S50.Browser
15 internal class BrowserData:
sage.ew.interficies.IBrowserData
19 private string _cSelect =
"";
20 private string ultimaConsulta;
21 long registrosleidos = 0;
26 #endregion Camps privats 32 private string _cTabla;
38 get {
return _cTabla; }
45 private string _cGroupBy =
"";
50 public string _GroupBy
52 get {
return _cGroupBy; }
53 set { _cGroupBy = value; }
56 private string _cOrderBy;
61 public string _OrderBy
63 get {
return _cOrderBy; }
64 set { _cOrderBy = value; }
67 private string _cCampo_Predet;
72 public string _Campo_Predet
74 get {
return _cCampo_Predet; }
75 set { _cCampo_Predet = value; }
78 private string _cCampos;
84 get {
return _cCampos; }
85 set { _cCampos = value; }
88 private string _cCondicion;
92 public string _Condicion
94 get {
return _cCondicion; }
95 set { _cCondicion = value; }
98 private string _cClave;
104 get {
return _cClave; }
105 set { _cClave = value; }
108 private string _cDataBase;
112 public string _DataBase
114 get {
return _cDataBase; }
115 set { _cDataBase = value; }
118 private Dictionary<string, object> _cCodigo;
122 public Dictionary<string, object>
_Codigo 124 get {
return _cCodigo; }
125 set { _cCodigo = value; }
131 [Description(
"Muestra en modo 'Browser' el Datatable"), DefaultValue(null)]
132 public DataTable _DatatablePersonalizado
134 get {
return _dtDatatablePersonalizado; }
137 _dtDatatablePersonalizado = value;
140 private DataTable _dtDatatablePersonalizado = null;
142 private string _cConsultaPersonalizada =
"";
146 public string _ConsultaPersonalizada
148 get {
return _cConsultaPersonalizada; }
151 _cConsultaPersonalizada = value;
155 private DataTable resultado = null;
159 public DataTable _Resultado
165 set { resultado = value; }
168 private bool _cSeleccion_Multiple =
false;
172 public bool _Seleccion_Multiple
174 get {
return _cSeleccion_Multiple; }
175 set { _cSeleccion_Multiple = value; }
181 #region Mètodes públics 183 public void _Execute()
188 #endregion Mètodes públics 190 private void ExecutaConsulta()
192 bool tbSoloEstructura =
false;
193 string tcFiltro =
"";
195 string sortcolumn =
"";
196 bool consultalistado =
false;
197 bool canviarordre =
true;
202 DataTable ldtResultado =
new DataTable();
205 string sqlresultados =
string.Empty;
206 string sqloriginal =
string.Empty;
207 string lcFrom =
string.Empty;
208 string lcWhere =
string.Empty;
209 string lcOrderBy =
string.Empty;
210 string lcGroupBy =
string.Empty;
217 if (_DatatablePersonalizado == null)
220 if (!
string.IsNullOrWhiteSpace(_ConsultaPersonalizada))
222 sqloriginal = AnalizeSql(_ConsultaPersonalizada);
226 sqloriginal = MountSql();
240 if (!
string.IsNullOrWhiteSpace(tcFiltro))
244 lcWhere = lcWhere +
" Where " + tcFiltro;
249 sqlresultados =
"Select ";
250 if (_Seleccion_Multiple)
252 sqlresultados += DB.SQLFalse() +
" as selected, ";
254 sqlresultados +=
"* From (";
255 sqlresultados += sqloriginal;
256 sqlresultados +=
") as sqlresult ";
257 sqlresultados += lcWhere;
260 if (!tbSoloEstructura)
268 if (
string.IsNullOrWhiteSpace(sortcolumn))
278 if (
string.IsNullOrWhiteSpace(sortcolumn))
283 if (!
string.IsNullOrWhiteSpace(lcOrderBy))
289 string[] aliascamps = _cSelect.Split(
',');
292 string[] orderbycamps = lcOrderBy.Split(
',');
293 foreach (
string orderbycamp
in orderbycamps)
295 string lowercamp = orderbycamp.ToLower().Trim();
296 string orderbyascdesc =
"";
298 if (lowercamp.Contains(
" desc"))
300 orderbyascdesc =
" desc ";
301 lowercamp = lowercamp.Replace(
" desc",
"");
304 if (lowercamp.Contains(
" asc"))
306 orderbyascdesc =
" asc ";
307 lowercamp = lowercamp.Replace(
" asc",
"");
311 int poscamporderby = -1;
312 for (
int i = 0; i < aliascamps.Length; i++)
314 string loweralias = aliascamps[i].ToLower().Trim();
316 if (loweralias.Contains(lowercamp))
318 poscamporderby = i + 1;
323 if (poscamporderby > -1)
325 orderby += coma + poscamporderby.ToString() + orderbyascdesc;
347 sortcolumn = orderby;
352 if (!
string.IsNullOrWhiteSpace(sortcolumn))
375 if (!
string.IsNullOrWhiteSpace(sortcolumn))
377 sqlresultados +=
" Order by " + sortcolumn;
390 DB.SQLExec(sqlresultados, ref ldtResultado);
396 ultimaConsulta = sqlresultados;
399 batchdatareader.
_Sqlquery = sqlresultados;
400 batchdatareader.
_Read();
404 sage.
ew.
functions.
FUNCTIONS._MessageBox(
"Se han producido incidencias en la ejecución de la consulta SQL." + Environment.NewLine +
405 "Se mostrarán los datos de la configuración original." + Environment.NewLine + Environment.NewLine +
406 "Incidencias:" + Environment.NewLine + batchdatareader.
_Error_Message, MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, DialogResult.OK);
409 if (!
string.IsNullOrWhiteSpace(_ConsultaPersonalizada))
411 _ConsultaPersonalizada =
"";
418 registrosleidos = batchdatareader.
_RowsRead;
421 if (_Seleccion_Multiple)
423 ldtResultado.Columns[
"selected"].ReadOnly =
false;
438 ldtResultado = _DatatablePersonalizado;
447 _Resultado = ldtResultado;
450 private string AnalizeSql(
string consultapersonalizada)
452 string sqloriginal = consultapersonalizada;
453 string lcFrom =
string.Empty;
454 string lcWhere =
string.Empty;
455 string lcOrderBy =
string.Empty;
456 string lcGroupBy =
string.Empty;
459 int lnPosSelect = consultapersonalizada.ToLower().IndexOf(
"select", StringComparison.OrdinalIgnoreCase);
460 int lnPosFrom = consultapersonalizada.ToLower().IndexOf(
"from", StringComparison.OrdinalIgnoreCase);
461 int lnPosWhere = consultapersonalizada.ToLower().LastIndexOf(
"where", StringComparison.OrdinalIgnoreCase);
462 int lnPosGroupBy = consultapersonalizada.ToLower().LastIndexOf(
"group by", StringComparison.OrdinalIgnoreCase);
463 int lnPosOrderBy = consultapersonalizada.ToLower().LastIndexOf(
"order by", StringComparison.OrdinalIgnoreCase);
467 if (
string.IsNullOrWhiteSpace(_cSelect))
470 _cSelect = consultapersonalizada.Substring(lnPosSelect + 6, lnPosFrom - (lnPosSelect + 6));
478 string lcSelect = _cSelect;
485 lnPosAs = lcSelect.ToLower().IndexOf(
" as ");
502 lcAlias = lcSelect.Substring(0, lnPosAs).Trim();
506 lcSelect = lcSelect.Substring(lnPosAs + lnLenAs).Trim();
510 lnPosAs = lcSelect.IndexOf(
",");
512 lcamp = lcSelect.Substring(0).Trim();
515 lcamp = lcSelect.Substring(0, lnPosAs).Trim();
516 lcSelect = lcSelect.Substring(lnPosAs + 1).Trim();
520 lnPosPunt = lcamp.IndexOf(
".");
523 lcamp = lcamp.Substring(lnPosPunt + 1).Trim();
529 }
while (lnPosAs != -1);
533 if (lnPosWhere != -1)
534 lcFrom = consultapersonalizada.Substring(lnPosFrom + 4, lnPosWhere - (lnPosFrom + 4));
535 else if (lnPosGroupBy != -1)
536 lcFrom = consultapersonalizada.Substring(lnPosFrom + 4, lnPosGroupBy - (lnPosFrom + 4));
537 else if (lnPosOrderBy != -1)
538 lcFrom = consultapersonalizada.Substring(lnPosFrom + 4, lnPosOrderBy - (lnPosFrom + 4));
540 lcFrom = consultapersonalizada.Substring(lnPosFrom + 4);
543 if (lnPosWhere != -1)
545 if (lnPosGroupBy != -1)
546 lcWhere = consultapersonalizada.Substring(lnPosWhere + 6, lnPosGroupBy - (lnPosWhere + 6));
547 else if (lnPosOrderBy != -1)
548 lcWhere = consultapersonalizada.Substring(lnPosWhere + 6, lnPosOrderBy - (lnPosWhere + 6));
550 lcWhere = consultapersonalizada.Substring(lnPosWhere + 6);
553 if (!
string.IsNullOrWhiteSpace(lcWhere))
555 lcWhere =
"(" + lcWhere +
")";
560 if (lnPosGroupBy != -1)
562 if (lnPosOrderBy != -1)
563 lcGroupBy = consultapersonalizada.Substring(lnPosGroupBy + 8, lnPosOrderBy - (lnPosGroupBy + 8));
565 lcGroupBy = consultapersonalizada.Substring(lnPosGroupBy + 8);
569 if (lnPosOrderBy != -1)
571 lcOrderBy = consultapersonalizada.Substring(lnPosOrderBy + 8);
572 sqloriginal = sqloriginal.Substring(0, lnPosOrderBy - 1);
578 private string MountSql()
580 string sqloriginal =
string.Empty;
581 string lcFrom =
string.Empty;
582 string lcWhere =
string.Empty;
583 string lcOrderBy =
string.Empty;
584 string lcGroupBy =
string.Empty;
585 string lcCampos_No_Visibles =
string.Empty;
588 if (
string.IsNullOrWhiteSpace(_cSelect))
607 _cSelect = this._cCampos + lcCampos_No_Visibles;
611 lcFrom = DB.SQLDatabase(this._cDataBase, this._cTabla);
614 if (!
string.IsNullOrWhiteSpace(this._cCondicion))
615 lcWhere = this._cCondicion;
618 if (!
string.IsNullOrWhiteSpace(_cGroupBy))
619 lcGroupBy = _cGroupBy;
622 if (!
string.IsNullOrWhiteSpace(_cOrderBy))
623 lcOrderBy = _cOrderBy;
624 else if (!
string.IsNullOrWhiteSpace(_cCampo_Predet))
625 lcOrderBy = _cCampo_Predet;
627 sqloriginal =
"Select ";
628 sqloriginal += _cSelect;
629 sqloriginal +=
" From " + lcFrom;
630 sqloriginal += !
string.IsNullOrWhiteSpace(lcWhere) ?
" Where " + lcWhere :
"";
631 sqloriginal += !
string.IsNullOrWhiteSpace(lcGroupBy) ?
" Group By " + lcGroupBy :
"";
Int64 _MaxResults
Número máximo de registros que se recuperarán en cada petición
Int64 _Read(bool allrows=false)
Ejecuta la consulta y rellena el _Resultado con el primer lote
DataTable _Resultados
Datatable con el conjunto de resultados
string _Sqlquery
Consulta Sql
Int64 _RowsRead
Posición del último registro leido
string _Error_Message
Último mensaje de error
Clase para uso de funciones genéricas
Clase para la obtención de datos por lotes