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(); } ParametrosProcesados parProcesados = Parametros.AgregarParametros(consulta, valores, false); consulta = parProcesados.Consulta; String limitNumber = ""; if (consulta.Contains("select top ")) { String queryTemp = consulta.Replace("select top ", ""); limitNumber = queryTemp.Split(' ')[0]; consulta = consulta.Replace(" top " + limitNumber, ""); consulta = consulta + " limit " + limitNumber; } SQLiteCommand comando = conexion.CreateCommand(); comando.CommandText = consulta; comando.Transaction = tran; comando.CommandTimeout = 300000; for (int i = 0; i < parProcesados.ParametrosIdentificadores.Count; i++) { if (parProcesados.ValoresProcesados[i].GetType() != typeof(byte[])) { //if (valores[i].GetType() == typeof(String)) //{ // comando.CommandText = comando.CommandText.Replace(parProcesados.ParametrosIdentificadores[i], "'" + parProcesados.ValoresProcesados[i] + "'"); //} //else //{ SQLiteParameter sqliteParam = new SQLiteParameter(); sqliteParam.ParameterName = parProcesados.ParametrosIdentificadores[i]; sqliteParam.Value = parProcesados.ValoresProcesados[i]; if (parProcesados.ValoresProcesados[i].GetType() == typeof(DateTime)) { sqliteParam.DbType = DbType.DateTime; } //} //comando.Parameters.Add(parProcesados.ParametrosIdentificadores[i], DbType.AnsiString).Value = parProcesados.ValoresProcesados[i]; //sqliteParam.DbType = DbType.String; //else // comando.Parameters.Add(parProcesados.ParametrosIdentificadores[i], parProcesados.ValoresProcesados[i]); //if (consulta.Trim().StartsWith("select")) //{ // sqliteParam.Direction = ParameterDirection.Output; //} comando.Parameters.Add(sqliteParam); } else { comando.Parameters.Add(parProcesados.ParametrosIdentificadores[i], DbType.Binary, ((byte[])parProcesados.ValoresProcesados[i]).Length).Value = parProcesados.ValoresProcesados[i]; } } //Log.EscribirLog(consulta); DataTable dt = new DataTable(); DataSet ds = new DataSet(); ds.Tables.Add(dt); ds.EnforceConstraints = false; SQLiteDataReader dr = null; try { dr = comando.ExecuteReader(CommandBehavior.Default); ds.Load(dr, LoadOption.OverwriteChanges, dt); } catch (Exception ex) { throw new Exception(ex.Message); } if (tran == null) { CerrarConexion(); } return(dt); } catch (Exception ex) { DeshacerTransaccion(); throw new Exception(ex.Message + " E=" + conexion.State.ToString()); } }