Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   too many open handles to database en firebird (https://www.clubdelphi.com/foros/showthread.php?t=89306)

ronimaxh 30-10-2015 15:11:45

too many open handles to database en firebird
 
Saludos amigos del club, este error me da cuando realizo una carga masiva, leo desde un archivo texto despues de alcanzar 65,000 inserciones
ma produce una excepción (too many open handles to database), uso firebird 2.5 y c#, que puedo hacer para controlar esto y seguir insertando.

Casimiro Notevi 30-10-2015 15:43:43

¿Código y componentes?

ronimaxh 30-10-2015 15:58:34

Código:

{
            OpenFileDialog open = new OpenFileDialog();
            //  open.Filter = "*.txt";
            if (open.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                Stopwatch medir = new Stopwatch();
                medir.Start();
                //Stopwatch.StartNew();
                DateTime tiempo1 = DateTime.Now;
                //leer cantidad de lineas del archivo
                long count = 0;
                string archivo = open.FileName;
                char[] Delimitador = { '|' };
                StreamReader Lector = new StreamReader(archivo);
                string Linea1 = Lector.ReadLine();
                List<CargarRNC> Lista = new List<CargarRNC>();
                while (Linea1 != null)
                {
                    CargarRNC carga2= new CargarRNC();
                    string[] Campos = Linea1.Split(Delimitador);
                    carga2.Documento = Campos[0];
                    carga2.Cliente = Utilidades.LimpiarCadena(Campos[1]);
                    Lista.Add(carga2);
                    Linea1 = Lector.ReadLine();
                }
                Lector.Close();
                Lector.Dispose();
                count = Lista.Count;
                progressBar1.Maximum = Convert.ToInt32(count);
                progressBar1.Minimum = 0;
                progressBar1.Value = 0;
                CargarRNC.BorrarCargaRNC();
                FbConnection conn = ConectarFirebirdDB.ObtenerConexion();
                FbTransaction trans = conn.BeginTransaction();
                int i = 1;
                foreach(CargarRNC carga in Lista)
                {
                    string sqltxt = "insert into TB_CARGARNC (rnc,cliente,usuarioid,fechasist)values(" + "'" + carga.Documento+ "'" + "," + "'" + carga.Cliente + "'" + "," + Convert.ToString(0) + "," + "'" + Utilidades.ObtenerFechaHoraSist() + "'" + ")";
                    FbCommand cmd = new FbCommand(sqltxt, conn, trans);
                    Int32 aff = 0;

                    try
                    {
                        aff = cmd.ExecuteNonQuery();
                        if ((i % 1000 == 0))
                        {
                            trans.Commit();
                            trans = null;
                            trans = conn.BeginTransaction();
                            count = count - 1000;
                            cmd.Dispose();

                        }
                        else
                            if (count < 1000)
                            {
                                trans.Commit();
                                trans = null;
                                cmd.Dispose();
                                trans = conn.BeginTransaction();
                                count = count - 1;
                            }

                   
                    }
                    catch (Exception ex)
                    {
                        trans.Rollback();
                      MessageBox.Show(ex.Message);
                        trans = conn.BeginTransaction();
                    }
                    progressBar1.Increment(+1);
                    progressBar1.Refresh();
                    i++;
                    CantRegistroTxt.Text = Convert.ToString(i);
                    CantRegistroTxt.Refresh();
                }
             
                conn.Close();
                Lista.Clear();
                medir.Stop();
                MessageBox.Show("Preceso Terminado Satisfactoriamente, Tiempo Transcurrido: "+medir.Elapsed," Atencion", MessageBoxButtons.OK, MessageBoxIcon.Information);

            }
        }

    }

sólo utilizo el Proveedor de .NET


La franja horaria es GMT +2. Ahora son las 02:35:00.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi