コード例 #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();
                }


                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);
            }
        }