public static ParametrosProcesados AgregarParametros(String consulta, List <Object> parametros, Boolean PermiteGuardarBytes) { ParametrosProcesados parametrosProcesados = new ParametrosProcesados(); parametrosProcesados.ParametrosIdentificadores = new List <string>(); parametrosProcesados.ValoresProcesados = new List <object>(); List <String> parametrosIdentificadores = ObtenerListaParametros(consulta); if (parametros != null) { if (parametrosIdentificadores.Count != parametros.Count) { throw new Exception("La cantidad de parámetros no corresponde con la cantidad de valores proporcionados."); } #region entra a esta seccion si es consulta por parametros; if (parametros != null && parametros.Count > 0) { for (int i = 0; i < parametros.Count; i++) { if (parametros[i] != null) { Type type = parametros[i].GetType(); if (type == typeof(Int32) || type == typeof(float) || type == typeof(short) || type == typeof(Int64) || type == typeof(String) || type == typeof(Double) || type == typeof(Boolean) || type == typeof(decimal)) { if (parametrosIdentificadores[i].StartsWith("%")) { parametros[i] = "%" + parametros[i]; } if (parametrosIdentificadores[i].EndsWith("%")) { parametros[i] = parametros[i] + "%"; } if (parametrosIdentificadores[i].StartsWith("%") || parametrosIdentificadores[i].EndsWith("%")) { consulta = consulta.Replace(parametrosIdentificadores[i], parametros[i].ToString()); } else { //comando.Parameters.AddWithValue("@" + parametrosIdentificadores[i], parametros[i]); parametrosProcesados.ParametrosIdentificadores.Add("@" + parametrosIdentificadores[i]); parametrosProcesados.ValoresProcesados.Add(parametros[i]); } } else if (type == typeof(DateTime)) { if ((DateTime)parametros[i] != DateTime.MinValue) { //comando.Parameters.AddWithValue("@" + parametrosIdentificadores[i], parametros[i]); parametrosProcesados.ParametrosIdentificadores.Add("@" + parametrosIdentificadores[i]); parametrosProcesados.ValoresProcesados.Add(parametros[i]); } else { consulta = consulta.Replace("@" + parametrosIdentificadores[i], "NULL"); } } else if (type == typeof(Bitmap)) { //comando.Parameters.AddWithValue("@" + parametrosIdentificadores[i], Converter.BitmapTOBitArray((Bitmap)parametros[i])); parametrosProcesados.ParametrosIdentificadores.Add("@" + parametrosIdentificadores[i]); //if(PermiteGuardarBytes) parametrosProcesados.ValoresProcesados.Add(Imagenes.BitmapTOBitArray((Bitmap)parametros[i])); //else parametrosProcesados.ValoresProcesados.Add(Converter.BitmapATexto((Bitmap)parametros[i])); } else if (type == typeof(byte[])) { //comando.Parameters.AddWithValue("@" + parametrosIdentificadores[i], parametros[i]); parametrosProcesados.ParametrosIdentificadores.Add("@" + parametrosIdentificadores[i]); //if(PermiteGuardarBytes) parametrosProcesados.ValoresProcesados.Add(parametros[i]); //else parametrosProcesados.ValoresProcesados.Add(Converter.ByteArrayToString((byte[])parametros[i])); } else { //comando.Parameters.AddWithValue("@" + parametrosIdentificadores[i], Converter.ObjectToArray(parametros[i])); parametrosProcesados.ParametrosIdentificadores.Add("@" + parametrosIdentificadores[i]); //if(PermiteGuardarBytes) parametrosProcesados.ValoresProcesados.Add(Converter.ObjectToArray(parametros[i])); //else parametrosProcesados.ValoresProcesados.Add(Converter.ByteArrayToString(Converter.ObjectToArray(parametros[i]))); } } else { consulta = consulta.Replace("@" + parametrosIdentificadores[i], "NULL"); } } } #endregion } parametrosProcesados.Consulta = consulta; return(parametrosProcesados); }
public DataTable EjecutarConsulta(String consulta, List <Object> valores) { try { if (conexion.State != ConnectionState.Open) { Reconectar(); } SqlCommand comando = conexion.CreateCommand(); comando.CommandText = consulta; comando.Transaction = tran; comando.CommandTimeout = 300000; List <String> parametros = ObtenerListaParametros(consulta); if (valores != null) { if (parametros.Count != valores.Count) { throw new Exception("DBAcceso.EjecutarConsulta: La cantidad de parámetros no corresponde con la cantidad de valores proporcionados."); } #region entra a esta seccion si es consulta por parametros; if (valores != null && valores.Count > 0) { for (int i = 0; i < valores.Count; i++) { if (valores[i] != null) { Type type = valores[i].GetType(); if (type == typeof(Int32) || type == typeof(float) || type == typeof(short) || type == typeof(Int64) || type == typeof(String) || type == typeof(Double) || type == typeof(Boolean) || type == typeof(decimal)) { if (parametros[i].StartsWith("%")) { valores[i] = "%" + valores[i]; } if (parametros[i].EndsWith("%")) { valores[i] = valores[i] + "%"; } if (parametros[i].StartsWith("%") || parametros[i].EndsWith("%")) { consulta = consulta.Replace(parametros[i], valores[i].ToString()); } else { comando.Parameters.AddWithValue("@" + parametros[i], valores[i]); } } else if (type == typeof(DateTime)) { if ((DateTime)valores[i] != DateTime.MinValue) { comando.Parameters.AddWithValue("@" + parametros[i], valores[i]); } else { consulta = consulta.Replace("@" + parametros[i], "NULL"); } } else if (type == typeof(Bitmap)) { comando.Parameters.AddWithValue("@" + parametros[i], Imagenes.BitmapTOBitArray((Bitmap)valores[i])); } else if (type == typeof(byte[])) { comando.Parameters.AddWithValue("@" + parametros[i], valores[i]); } else { comando.Parameters.AddWithValue("@" + parametros[i], Converter.ObjectToArray(valores[i])); } } else { consulta = consulta.Replace("@" + parametros[i], "NULL"); } } } #endregion } //Log.EscribirLog(consulta); comando.CommandText = consulta; SqlDataReader dReader = null; DataTable dt = new DataTable(); try { dReader = comando.ExecuteReader(); dt.Load(dReader); dReader.Close(); } catch (Exception ex) { Reconectar(); if (ex.Message.Contains("DataReader") || ex.Message.Contains("ExecuteReader")) { for (int i = 0; i < 10; i++) { Reconectar(); Thread.Sleep(100); try { dt.Load(comando.ExecuteReader()); return(dt); } catch (Exception ex2) { Console.Write(ex2.Message); } } throw new Exception("Se superó el limite de intentos de consulta con el data reader ocupado."); } else if (ex.Message.ToLower().Contains("error: 0")) { if (tran == null) { if (Reconectar()) { dt.Load(comando.ExecuteReader()); Log.EscribirLog("Se perdió la conexión con el servidor, pero se pudo reestablecer exitosamente en algunos intento(s)."); } } else { throw new Exception("Se perdió la conexión con el servidor y debido a que se usa una transacción, se necesita iniciar el proceso nuevamente."); } } else { throw new Exception(ex.Message); } } if (tran == null || tran.Connection == null) { //conexion.Close(); //conexion.Dispose(); } comando.Dispose(); return(dt); } catch (Exception ex) { DeshacerTransaccion(); throw new Exception("DBAcceso.EjecutarConsulta:" + ex.Message); } }