none
Leer Datos de SQl y enviarlos a Firebird C# RRS feed

  • Pregunta

  • Hola buen día a todos.

    Mucho gusto a todos. Soy nueva en la programación y estoy buscando ayuda para un proceso que quiero hacer con una amiga. Las dos tenemos pocos conocimientos pero nos interesa y estamos investigando. Estamos leyendo información de una base de datos Firebird y queremos enviarla a una tabla de base de datos sql server. Ya tenemos la aplicación funcionando y leyendo la información de Firebird. Coloco el código que nos lee la información pero queremos enviarla a la tabla de sql server pero no queremos hacerla con un bucle para que no tarde o no se si pueda hacerse de otra forma. Cada vez que se ejecute el filtrado debe leer la información, borrar la tabla en sql server y llenarla con lo que se ha leido de firebird. Espero me hayan entendido y quenos puedan ayudar. Gracias y saluditos.

    Mi código que leer la información de Firebird:

    public static DataTable ObtieneVentasF(DateTime pFi, DateTime pFf)
            {
            string connectionString = null;
                string fi = pFi.ToString("MM/dd/yyyy");
                string ff = pFf.ToString("MM/dd/yyyy");
                FbConnection con = null;        
            FbDataReader dr = null;
            DataTable tabla = null;
            DataRow fila = null;
                string conexionSaeF = ConfigurationManager.ConnectionStrings["Sae"].ConnectionString;
    
    DataTable dtVentasF = new DataTable();
                try
                {
                    using (FbConnection conexion = new FbConnection(conexionSaeF))
                    {
                        conexion.Open();
                        FbCommand cmd = new FbCommand
                        ("select CVE_ART,NombreProducto,TipoProducto,CostoProducto,ExistenciaProducto where Inve01", conexion);
                        FbDataAdapter Adapter = new FbDataAdapter(cmd);
                        Adapter.Fill(dtVentasF);
                    }
                }
                catch (Exception ex)
                {
                    throw new ApplicationException("No fué posible obtener las ventas", ex);
                }
                return dtVentasF;
    
    }

    La información de todos los registros quiero enviarla a mi otra tabla en SQL Server. LAs tablas se llaman igual y tienen los mismos nombres. Una vez más gracias

    Saludos

    jueves, 17 de junio de 2021 1:22

Respuestas

  • Para grabar a la máxima velocidad, puedes usar el objeto SqlBulkCopy. Internamente lo que hace es abrir una conexión para "streaming" a través del Tabular Data Stream, y envía los datos del DataTable por esa vía. Es la forma más rápida de grabar masivamente registros en SQL Server.

    Aquí tienes la documentación. Viene con un ejemplo un poco lioso, pero no te compliques por él. Solo hay que instanciar el SqBulkCopy y pasarle la conexión al destino, el nombre de la tabla, y el DataTable que ya tienes porque te lo devuelve la subrutina que has mostrado. Si las tablas tienen los mismos campos, no se necesita hacer nada para "mapear" los unos a los otros, ya lo hace todo automáticamente.

    jueves, 17 de junio de 2021 7:52
    Moderador

Todas las respuestas

  • Para grabar a la máxima velocidad, puedes usar el objeto SqlBulkCopy. Internamente lo que hace es abrir una conexión para "streaming" a través del Tabular Data Stream, y envía los datos del DataTable por esa vía. Es la forma más rápida de grabar masivamente registros en SQL Server.

    Aquí tienes la documentación. Viene con un ejemplo un poco lioso, pero no te compliques por él. Solo hay que instanciar el SqBulkCopy y pasarle la conexión al destino, el nombre de la tabla, y el DataTable que ya tienes porque te lo devuelve la subrutina que has mostrado. Si las tablas tienen los mismos campos, no se necesita hacer nada para "mapear" los unos a los otros, ya lo hace todo automáticamente.

    jueves, 17 de junio de 2021 7:52
    Moderador
  • Hola buen día. Alberto Poblacion, te comento que lo resolví con SqlBulkCopy. Para un aproximado de 2 millones de registros en 10 tablas se lleva 5 minutos y considero para la cantidad de información no es mucho. muchas gracias por tu ayuda te agradezco muchisimo. Saludos cordiales
    lunes, 21 de junio de 2021 13:37