Пример #1
0
        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);
        }
Пример #2
0
        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());
            }
        }