none
Importar txt a una tabla de SQL Server mediante Visual Studio asp.net sin estar dentro del servidor RRS feed

  • Pregunta

  • Mi aplicación web la tengo en la PC del servidor, los usuarios entran a la aplicación para capturar mediante la url.
    Estoy creando un form en Visual Studio con lenguaje asp.net en el que el usuario tiene que seleccionar un archivo txt con registros, cada dato que corresponde a una columna está dividido con comas, realicé un procedimiento en el que especifico la ruta como tal del archivo para importar los registros y sí funciona, el procedimiento es el siguiente:

    ALTER PROCEDURE [dbo].[Cat_ImportarAsistencias] 
    AS
    BEGIN
    BULK
    INSERT TBL_LISTA_ASISTENCIAS
    FROM 'C:\Users\admin\Desktop\CHECADOR.txt' --location with filename
    WITH(
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = '\n'
    )
    END

    Lo mando llamar en Visual Studio, de igual manera me funciona correctamente, el detalle está en que necesito que la información del documento txt se pueda importar sin tener problemas de dónde esté la dirección del doc, no quiero especificar una dirección como en el procedimiento, ya que la importación se va a realizar desde otros equipos que son independientes al servidor, quisiera poder tomar la ruta de cualquier equipo y se haga la importación en SQL.

    Espero poder contar con su ayuda, ya que he seguido varios tutoriales pero ninguno hace algo similar a lo que necesito hacer.

    Saludos

    martes, 9 de abril de 2019 22:28

Respuestas

  • Me gustaría ver si me puedes decir cómo realizar el Upload

    Hay miles de ejemplos por la red. Por ejemplo, aquí tienes un tutorial:

    http://tutorialesprogramacionya.com/aspnetya/detalleconcepto.php?codigo=69

    • Marcado como respuesta Juanis Esp jueves, 11 de abril de 2019 21:13
    miércoles, 10 de abril de 2019 19:00
  • En una aplicación web, la cuenta que salva el archivo no es la del usuario que lo sube, sino la cuenta del servicio bajo el que se ejecuta el pool de aplicaciones en IIS. Por lo tanto, el requisito para que funcione es que esa cuenta tenga permiso sobre la carpeta de destino. No te confundas por el comportamiento que observes en tiempo de desarrollo mientras lo ejecutas en Visual Studio, porque en este caso se usa tu propia cuenta, que tendrá distintos tipos de permisos sobre la carpeta de destino.

    Cuando publiques la aplicación en IIS, vete a la configuración de los Pooles de aplicaciones, opciones Avanzadas, y mira ahí la cuenta bajo la que se ejecuta el Pool en el que has publicado tu aplicación. Puedes cambiar la cuenta si es necesario. Lo importante es que en la carpeta en la que estás subiendo los ficheros tiene que estar concedido el permiso de escritura para esa cuenta. Con eso funciona la copia de ficheros a esa carpeta.

    • Marcado como respuesta Juanis Esp lunes, 15 de abril de 2019 19:59
    viernes, 12 de abril de 2019 5:23

Todas las respuestas

  • No, con ese procedimiento no puedes tomar el archivo desde cualquier equipo. Cuando haces el "Bulk Insert", ese comando se ejecuta dentro del proceso del SQL Server, NO se ejecuta dentro del proceso del programa que envía esa sentencia al servidor SQL. Puesto que lo está ejecutando el servidor, esa "C:..." de la ruta se refiere al disco C: del servidor. En general, si la red está bien protegida, el servidor no podrá acceder al disco de los equipos cliente, luego no podrá leer el fichero si está ubicado en un equipo cliente.

    Tienes dos soluciones: Una es primero "subir" el fichero desde el equipo cliente a una ubicación temporal en el servidor (se puede hacer un Upload si es una aplicación asp.net), y luego lanzar el procedimiento almacenado pasándole la ubicación del archivo temporal.

    La otra opción es prescindir del Bulk Insert y hacer un programa cliente que lea los datos uno por uno y los vaya enviando al servidor mediante sentencias INSERT. Pero esto requiere código cliente, no lo podrás hacer si en el PC cliente solo estás ejecutando un navegador que presenta las páginas de la aplicación ASP.NET. Si este es tu caso, entonces me temo que solo te queda la primera opción (hacer el Upload).

    miércoles, 10 de abril de 2019 6:15
  • De hecho hice ese procedimiento porque en un principio no tenía bien establecida la idea, pero conforme fui avanzando me di cuenta que no me serviría, por lo cuál comencé a hacer pruebas con otros códigos que encontré pero no logré que funcionara, ya que no era lo que estaba buscando.

    Me gustaría ver si me puedes decir cómo realizar el Upload que mencionas, ya que sí es una aplicación asp.net.

    Gracias por tu atención y espero poder contar con tu ayuda.

    Saludos.

    miércoles, 10 de abril de 2019 13:27
  • Me gustaría ver si me puedes decir cómo realizar el Upload

    Hay miles de ejemplos por la red. Por ejemplo, aquí tienes un tutorial:

    http://tutorialesprogramacionya.com/aspnetya/detalleconcepto.php?codigo=69

    • Marcado como respuesta Juanis Esp jueves, 11 de abril de 2019 21:13
    miércoles, 10 de abril de 2019 19:00
  • Sí me funcionó al hacerlo en local, pero al subirlo a la red, la dirección en la que lo guardará siempre me pide permiso para continuar cuando requiero subir archivos, no sé si pudieras decirme qué podría hacer ahí para aceptar y continuar desde Visual Studio.

    Cuando trato de copiar algo a la carpeta de destino de la aplicación me manda una pantalla que dice: "Acceso a la carpeta de destino denegado" y lo que hago ahí es darle clic en "Continuar" así es como me deja copiar los archivos, necesito aceptar o continuar desde Visual y no sé cómo hacer eso.

    De antemano te agradezco tu atención.


    jueves, 11 de abril de 2019 20:30
  • En una aplicación web, la cuenta que salva el archivo no es la del usuario que lo sube, sino la cuenta del servicio bajo el que se ejecuta el pool de aplicaciones en IIS. Por lo tanto, el requisito para que funcione es que esa cuenta tenga permiso sobre la carpeta de destino. No te confundas por el comportamiento que observes en tiempo de desarrollo mientras lo ejecutas en Visual Studio, porque en este caso se usa tu propia cuenta, que tendrá distintos tipos de permisos sobre la carpeta de destino.

    Cuando publiques la aplicación en IIS, vete a la configuración de los Pooles de aplicaciones, opciones Avanzadas, y mira ahí la cuenta bajo la que se ejecuta el Pool en el que has publicado tu aplicación. Puedes cambiar la cuenta si es necesario. Lo importante es que en la carpeta en la que estás subiendo los ficheros tiene que estar concedido el permiso de escritura para esa cuenta. Con eso funciona la copia de ficheros a esa carpeta.

    • Marcado como respuesta Juanis Esp lunes, 15 de abril de 2019 19:59
    viernes, 12 de abril de 2019 5:23
  • Ya pude realizar la acción de importación mediante otras PC's, muchísimas gracias por su ayuda y paciencia.

    Saludos

    lunes, 15 de abril de 2019 20:01