none
Multiples consultas DBF RRS feed

  • Pregunta

  • Buenas a todos,

           Hace unos meses genere un web service para poder conectarme a una base de datos .DBF al no conocer la estrutura de dicha base de datos y realizar su migracion a MySQL se decidio por hacer copias de los archivos .DBF y de ahi gestionar las consultas necesarios a dicha base de datos. Lo siguiente son los pasos que se generaron en el web service

    • Web service ASP.NET
    • Posee 3 webMethod con las siguientes indicaciones
    • Generada la llamada al web service desde su web method este realiza las copias de los archivos .DBF
    • Gestiona la consulta a base de los archivos copiados al destino con el driver VFP
    • Entrega el resultado

    Hasta dichos meses no genero errores al realizar las consultas a las base de datos, pero cuando varios usuarios realizan una carga masiva al web service este se detuvo. No he podido obtener una respuesta valida a lo deseado, ya que una vez abierta la conexion a la base de datos .DBF no permite mas conexiones a otras consulta.

    if (tokenAddress == ipAddress)
                {
                    copyTable copiar = new copyTable();
                    copiar.Copy();
    
                    string var = "\"" + rut + "%\"";
                    string cadenaCnn = @"Provider=vfpoledb;Data Source=C:\TMPLAUDUS;Collating Sequence=general;";
                    string consultaVFP = "SELECT Clientes.idcliente, Clientes.idtipo, Clientes.idvendedor, Clientes.iddealer, Clientes.nombre, Clientes.dirección as direccion, Clientes.comuna, Clientes.cp, Clientes.ciudad, Clientes.región as region, Clientes.país as pais, Clientes.countrycode, Clientes.teléfono as telefono, Clientes.teléfono2 as telefono2, Clientes.fax, Clientes.email, Clientes.dte_email, Clientes.webpage, Clientes.idpricel, Clientes.descuento, Clientes.discountisadditive, Clientes.plazopago, Clientes.idformapag, Clientes.notas, Clientes.idcuenta, Clientes.creditlimit, Clientes.rut, Clientes.dígitoverificación as dgv, Clientes.vatid, Clientes.razónsocial, Clientes.direcciónfacturación as direccionfacturacion, Clientes.comunafacturación as comunafacturacion, Clientes.cpfacturación as cpfacturacion, Clientes.ciudadfacturación as ciudadfacturacion, Clientes.paísfacturación as paisfacturacion, Clientes.countrycode_invoicing, Clientes.giro, Clientes.horario, Clientes.díacobro as diacobro, Clientes.defaultquoteheader, Clientes.defaultquotefooter, Clientes.blocked, Clientes.blocked_exceedcreditlimit, Clientes.blocked_overdueinvoices, Clientes.foreigner, Clientes.createdby, Clientes.createdon, Clientes.modifiedby,  Clientes.modifiedon, Clientes.comercionet_code, Clientes.separador, Clientes.extranet_username, Clientes.extranet_password, Clientes.extranet_allowaccess FROM EMPRESA!CLIENTES CLIENTES WHERE TRANSFORM(Clientes.rut) like " + var + " ";
    
                    using (System.Data.OleDb.OleDbConnection cnn = new System.Data.OleDb.OleDbConnection(cadenaCnn))
                    {
                        cnn.Open();
                        System.Data.OleDb.OleDbDataAdapter da = new System.Data.OleDb.OleDbDataAdapter(consultaVFP, cnn);
                        DataSet ds = new DataSet();
                        da.Fill(ds);
                        return ds;
                    }
                }

    Metodo para copiar los archivos

    string[] archivos = { "empresa.dbc","empresa.dct","clientes.fpt","clientes.cdx","clientes.dbf", "pedidos.dbf","pedidos.cdx", "pedidos.fpt", "orders.dbf", "orders.cdx", "orders.fpt", "currencies.dbf", "currencies.cdx", "detalleorders.dbf", "detalleorders.cdx", "detalleorders.fpt", "productos.dbf", "productos.cdx", "productos.fpt", "serialnumbers.dbf", "serialnumbers.cdx", "facturas.dbf", "facturas.cdx", "facturas.fpt", "detallefacturas.fpt", "detallefacturas.dbf", "detallefacturas.cdx", };
    
                string carpetaOrigen = @"E:\Laudus\Empresas\BPT";
                string carpetaDestino = @"C:\TMPLAUDUS";
    
    
                try
                {
                    if (!System.IO.Directory.Exists(carpetaDestino))
                    {
                        System.IO.Directory.CreateDirectory(carpetaDestino);
                        if (System.IO.Directory.Exists(carpetaDestino))
                        {
                            foreach (string i in archivos)
                            {
                                string archivo = i;
                                string origen = System.IO.Path.Combine(carpetaOrigen, archivo);
                                System.IO.FileStream file = new System.IO.FileStream(origen, System.IO.FileMode.Open, System.IO.FileAccess.Read);
                                string destino = System.IO.Path.Combine(carpetaDestino, archivo);
                                System.IO.FileStream copia = new System.IO.FileStream(destino, System.IO.FileMode.Open, System.IO.FileAccess.ReadWrite);
                                System.IO.File.Copy(origen, destino, true);
                            }
                        }
                    }
                    else
                    {
                        foreach (string i in archivos)
                        {
                            string archivo = i;
                            string origen = System.IO.Path.Combine(carpetaOrigen, archivo);
                            string destino = System.IO.Path.Combine(carpetaDestino, archivo);
                            System.IO.File.Copy(origen, destino, true);
    
                        }
                    }
                }
                catch (Exception)
                {
                    
                

    Es posible obtener una mejor solucion para dichos procesos ya que no es valido que cada usuario deba esperar a otro para gestionar sus solicitudes por medio del web service.

    jueves, 10 de octubre de 2019 19:44

Todas las respuestas