none
insercion automatizada y constante de datos desde archivo excel a base de datos RRS feed

  • Pregunta

  • Hola

    estoy aun dandole vueltas al asunto de como poder automatizar algun proceso que me manipule un archivo en especifico en el servidor y este me lo lea y me lo guarde en la base de datos, los archivos son excel este es la consulta que me los guarda

    INSERT INTO Tabla
    SELECT Nombre,Edad
    FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
    'Excel 8.0;Database=C:\DatosOrigen\datos.xls', 
    'SELECT * FROM [hoja1$]')

    pero a ese metodo o consulta, tengo que darle una especie de parametro de entrada que sera el nombre del archivo, y este nombre del  archivo viene de otra consulta que en esta se trata de que me seleccione el ultimo archivo subido al servidor... y estas consultas las necesito "programar" cada cierto tiempo...

    ojala se haya entendido

    alguna idea? gracias!


    Soy rudo (H)

    lunes, 13 de febrero de 2012 20:37

Respuestas

  • Basicamente Integration services funciona como un workflow:

    Es decir, una vez tienes todo instalado, abres la herramienta y te aparece un panel con "acciones", que tienes que arrastrar al panel central, donde vas creando gráficamente todo.

    Estas acciones se dividen por tipo en: Origen de datos (cualquier tipo de origen que reconozca ADO.Net), acciones de selección de datos, acciones de transformación de esos datos y un destino (de nuevo cualquier tipo de destino que reconozca ADO.Net).

    Aquí tienes un vídeo para que te hagas a la idea de en qué consiste: 
    http://www.youtube.com/watch?v=CyjGe3OkXPg

    La curiosidad es que tu fichero de orgien varía. A este fin, una de esas "cajitas" que usas en el Workflow de Integration Services puede ser un "trozo" de código. En este código podrías decirle que seleccione ese archivo con la última fecha (como pones arriba). El resto de las operaciones se harían con "Wizards" y paneles de configuración, sin necesidad de escribir código.

    Lo único que es un poco más duro, es aprender a usar los integration services. Pero es muy intuitivo y una vez has hecho dos, ya sabes hacerlos todos ;).


    Fernanando Escolar - http://www.programandonet.com/ - @fernandoescolar



    • Editado Fernando Escolar martes, 14 de febrero de 2012 12:27
    • Marcado como respuesta ale2323 martes, 14 de febrero de 2012 12:28
    martes, 14 de febrero de 2012 12:23

Todas las respuestas

  • Hola ale2323,

    Lo mejor en mi opinión es que mires el Sql Server Integration Services. Allí puedes crear un "importador" de datos, mediante un workflow.

    Por ejemplo podrías decirle que abra el excel, lea los datos, los transforme según especificaciones y los almacene en la base de datos de sql server (o cualquier otra) que tengas.

    Este workflow puede tener un código en C# (o vb.net) donde buscas todos los archivos de un directorio por fecha y seleccionar el más reciente para que sea el origen de datos.

    Después este workflow lo exportas a un paquete "sisx" y puedes crear un Job en Sql Server que se ejecute periodicamente (como lo configures).

    Alguna vez he tenido un escenario como este y estas herramientas han resultados excelentes :)


    Fernanando Escolar - http://www.programandonet.com/ - @fernandoescolar

    martes, 14 de febrero de 2012 10:46
  • wooowww diste en el punto, lo he tratado de poner en el foro de diferentes formas pero nadie ha puesto algo en concreto como tu... solo me gustaria preguntarte si es muy dificil lo que dices, porque yo ahora estoy de analista en una empresa realizando mi practica, y en caso de que me contraten ahi tengo que hacer todo lo que es codigo, por ejemplo tengo mucho avanzado en asp c#, pero al percatarme que tendria este problema preferi ponerlo en tema antes de llegar al momento de... pero como dices que se puede y no es imposible me da algo de esperanza porque he buscado informacion todos estos dias y no e podido pillarla.. he encontrado cosas similares, pero nada como lo explicas tu...

    respecto a lo que me dices en estos momentos no tengo el sql server en mi maquina, pero quiero anticiaprme a las cosas, y me gustaria entrar en una converzacion mas profunda sobre el tema, tu dices que se puede crear un workflow con lenguaje c#, nunca he hecho un workflow, nose si se podria ocupar por ejemplo un metodo que tengo en c# , tengo uno que me recoje el nombre del ultimo archivo subido con esto :

    string[] Files = Directory.GetFiles(MapPath("~/Upload/").ToString());
    string filee = (from item in Files let file = new FileInfo(item)orderby file.CreationTime descending select file.Name).First();
    


    este me selecciona el nombre del ultimo archivo, y para procesarlo tengo este otro:

     protected GridView TablaReturn()
       
        {
            OleDbConnection oConn = new OleDbConnection();
            OleDbCommand oCmd = new OleDbCommand();
            OleDbDataAdapter oDa = new OleDbDataAdapter();
            DataSet oDs = new DataSet();
    
            string xx = "C:/Documents and Settings/Maximiliano.Contrera/Mis documentos/Visual Studio 2008/WebSites/Prototipo/Upload/este.xls";
    
    
    
            oConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + xx + ";Extended Properties=Excel 8.0;";
            oConn.Open();
            oCmd.CommandText = "SELECT * FROM [Hoja1$] " +
                         "Where ([os-cst] IN (SELECT MAX([os-cst]) FROM [Hoja1$] " +
                                             "WHERE ([Estado OS] <> 'Finalizado') AND ([Estado OS] <> 'Cancelado')" +
                                             " GROUP BY [Numero OS]))" +
                         "ORDER BY [Numero OS]";
    
    
        
    
            oCmd.Connection = oConn;
            oDa.SelectCommand = oCmd;
            oDa.Fill(oDs);
    
    
    
            GridView x = new GridView();
          
            x.DataSource = oDs.Tables[0].DefaultView;
            x.DataBind();
    
            oConn.Close();
    
            return x;
        }

    que me retorna una tabla y la almaceno en un gridview y despues apreto un boton y me guarda ese contenido en la base de datos.. algo que deveria pasar internamente, no de forma "usuario"... osea procedimientos internos del motor de la base de datos ..

    a lo que voy, tu dices que sepude implementar con condigo c# podria ser algo asi ? osea ocupando este tipo de metodos?

    gracias !!! :)


    Soy rudo (H)

    martes, 14 de febrero de 2012 12:07
  • Basicamente Integration services funciona como un workflow:

    Es decir, una vez tienes todo instalado, abres la herramienta y te aparece un panel con "acciones", que tienes que arrastrar al panel central, donde vas creando gráficamente todo.

    Estas acciones se dividen por tipo en: Origen de datos (cualquier tipo de origen que reconozca ADO.Net), acciones de selección de datos, acciones de transformación de esos datos y un destino (de nuevo cualquier tipo de destino que reconozca ADO.Net).

    Aquí tienes un vídeo para que te hagas a la idea de en qué consiste: 
    http://www.youtube.com/watch?v=CyjGe3OkXPg

    La curiosidad es que tu fichero de orgien varía. A este fin, una de esas "cajitas" que usas en el Workflow de Integration Services puede ser un "trozo" de código. En este código podrías decirle que seleccione ese archivo con la última fecha (como pones arriba). El resto de las operaciones se harían con "Wizards" y paneles de configuración, sin necesidad de escribir código.

    Lo único que es un poco más duro, es aprender a usar los integration services. Pero es muy intuitivo y una vez has hecho dos, ya sabes hacerlos todos ;).


    Fernanando Escolar - http://www.programandonet.com/ - @fernandoescolar



    • Editado Fernando Escolar martes, 14 de febrero de 2012 12:27
    • Marcado como respuesta ale2323 martes, 14 de febrero de 2012 12:28
    martes, 14 de febrero de 2012 12:23
  • T.T tengo blokeado youtube aca en el trabajo XD, lo vere apenas llege a mi casa, pero me dieron unas introducciones con especie de tutoriales (http://msdn.microsoft.com/es-es/library/ms365302.aspx) supongo que algo tiene que ver.. ahora le estoy hechando un vistaso, pero muchas gracias  ojala cuando empice a poner manos a la obra estes aqui en el foro para que me puedas ayudar , ya que por lo que veo eres el unico que ha trabjado con este tipo de requerimientos... mientras buscare tutoriales cosas como el video que supongo q es algo asi como un tutorial o una introduccion...

    Muchas gracias y hasta pronto !


    Soy rudo (H)

    martes, 14 de febrero de 2012 12:28
  • El mini tutorial que indicas me parece muy acertado para empezar a usar integration services :)

    Por ahora seguiré por estos foros, así que podré intentar ayudarte en el futuro.

    Buena suerte y que disfrutes de esta herramienta (a mi personalemente em gustó mucho).

    Un saludo,


    Fernanando Escolar - http://www.programandonet.com/ - @fernandoescolar

    martes, 14 de febrero de 2012 12:40