Buscar Valores en una base de datos desde InfoPath 2010 programáticamente.

Para realizar búsquedas en una base datos desde InfoPath en 3 pasos.
1. Crea la tabla en la base de datos donde tienes toda la información
image
2. Crea un formulario en InfoPath con los campos que necesita extraer de la base de datos.
image
3. Finalmente agregue el siguiente código en el botón buscar,
Click  derecho en el botón y seleccionar propiedades
image
Seleccionar Edit Form Code
image

Pegar el código, es necesario agregar la librería, siguiente y la referencia System.Data.
using System.Data.SqlClient;
   1:  

   2:             XPathNavigator nav = CreateNavigator();

   3:             XPathNavigator nav1 = CreateNavigator();

   4:             XPathNavigator nav2 = CreateNavigator();

   5:             XPathNavigator nav3 = CreateNavigator();

   6:             XPathNavigator nav4 = CreateNavigator();

   7:             XPathNavigator nav5 = CreateNavigator();

   8:             XPathNavigator nav6 = CreateNavigator();

   9:             XPathNavigator nav7 = CreateNavigator();

  10:             XPathNavigator nav8 = CreateNavigator();

  11:  

  12:             // Obtener el valor a buscar desde el campo de infopath

  13:             XPathNavigator ValorRadicado = nav.SelectSingleNode("/my:Encuestas/my:A/my:A11RadicadoValor", NamespaceManager);

  14:  

  15:             //Cadena de Conexión

  16:             string strConn = @"Server=NombreServer;Database=BasedeDatos;User Id=usuario;Password=Password;";

  17:             //nueva sql conexión

  18:             SqlConnection conn = new SqlConnection(strConn);

  19:  

  20:             //armar la consulta de sql 

  21:             SqlCommand cmd = new SqlCommand("SELECT * FROM Institucion WHERE Radicado = '" + ValorRadicado.ToString() + "'", conn);

  22:  

  23:             //abrir conexión, ejecutar comando, colocar el resultado en el sqldatareader 

  24:             SqlDataReader reader;

  25:             try

  26:             {

  27:                 conn.Open();

  28:                 reader = cmd.ExecuteReader();

  29:                 if (reader.HasRows)

  30:                 {

  31:                     while (reader.Read())

  32:                     {

  33:                         //Asignar los valores del resultaddo de la consulta en campos del formulario

  34:                         nav1.SelectSingleNode("/my:Encuestas/my:InstitucionEducativa/my:A14Region", NamespaceManager).SetValue(reader[0].ToString());

  35:                         nav2.SelectSingleNode("/my:Encuestas/my:InstitucionEducativa/my:A112Dpto", NamespaceManager).SetValue(reader[2].ToString());

  36:                         nav3.SelectSingleNode("/my:Encuestas/my:InstitucionEducativa/my:A11InstitucionEduc", NamespaceManager).SetValue(reader[5].ToString());

  37:                         nav4.SelectSingleNode("/my:Encuestas/my:InstitucionEducativa/my:A13Municipio", NamespaceManager).SetValue(reader[3].ToString());

  38:                         nav5.SelectSingleNode("/my:Encuestas/my:InstitucionEducativa/my:A15DaneSede", NamespaceManager).SetValue(reader[4].ToString());

  39:                         nav6.SelectSingleNode("/my:Encuestas/my:InstitucionEducativa/my:A16NombreSede", NamespaceManager).SetValue(reader[6].ToString());

  40:                         nav7.SelectSingleNode("/my:Encuestas/my:InstitucionEducativa/my:A17Zona", NamespaceManager).SetValue(reader[7].ToString());

  41:                         nav8.SelectSingleNode("/my:Encuestas/my:InstitucionEducativa/my:A18TipoSede", NamespaceManager).SetValue(reader[8].ToString());

  42:                        

  43:                     }

  44:                 }

  45:             }

  46:             finally

  47:             {

  48:                 conn.Close();

  49:             }

  50:         }

Resultado

image

Comentarios

  1. Disculpen ¿Qué significa: ("/my:Encuestas/my:A/my:A11RadicadoValor?
    GRacias

    ResponderBorrar
  2. Perdona la demora, esa es la ruta del componente en el formulario, es decir en mi caso el campo en el formulario de infopath se llama A11RadicadoValor y lo que le antecede es la ruta completa que infopath le da.
    En tu caso para saber esa ruta debes en el componente, dentro del formulario infopath en la vista diseño, hacer click derecho y existe la opción Copy Xpath (http://blogs.msdn.com/b/infopath/archive/2006/06/07/621202.aspx) y vas a la vista de codigo y la pegas.
    Cualquier duda me comentas.

    ResponderBorrar
  3. hey que tal,
    tengo una bd en access la cual ya he conectado a infopath, he logrado hacer consultas, pero me gustaria trabajar con condigo personalizado para que mis botones realicen consultas sql a mi bd; el problema es que infopath genera mucha codigo al vuelo y no puedo trabajar con el;

    pretendo que en cada registro exista un boton para eliminar pero cuando hago clic en el boton, no esta ligado con el registro ; o sea no se como ligar la informacion del registro; si alguien me puede ayudar desde ya gracias jejej

    aca un codigo que encontre

    Public Sub btnDel_Clicked(ByVal sender As Object, ByVal e As ClickedEventArgs)
    Dim message As String = String.Empty
    Dim root As XPathNavigator = MainDataSource.CreateNavigator()
    Dim nodes As XPathNodeIterator = root.Select("/dfs:myFields/dfs:dataFields/dersonas/@Id", NamespaceManager)

    Do While nodes.MoveNext
    message += nodes.Current.Value & System.Environment.NewLine
    Loop
    MessageBox.Show(message)
    End Sub

    Prentendo obtener el valor del "@Id" pero solo logro mostrar una lista con toos los valores; el objetivo es que cada avlor corresponda con un boton; pero infopath genera mucha informacion el vuelo


    https://s.yimg.com/hd/answers/i/f9ca2cceed964091b8672c530fc6bd7b_A.png?a=answers&mr=0&x=1406522280&s=24a582db7b8f7c78e5e1e8d1b03c7f17

    ResponderBorrar
    Respuestas
    1. Hola Jesus, en este link esta como puedes asociar el codigo a un botón en infopath (http://johanolivier.blogspot.com/2010/08/infopath-2010-development-part-1-add.html), respecto a conocer el Id de cada registro una opción es, al momento de hacer la consulta tambien asignes el ID de cada registro a un campo del formulario, este campo puede o no ser visible en tu formulario, con esto al momento de generar la consulta ya sea un Update o un Delete, usas ese campo ID para enviarlo como parametro.
      Así como en el ejemplo que coloque la consulta "Select" tiene un parametro es decir el "Where" cuando retornas todos los registros en uno de los campos guardas el ID, y como te comente anteriormente pudes utilizar ese ID.

      Espero te ayude con tus dudas

      Borrar
  4. y si necesito mostrar una imagen como le hago ?

    ResponderBorrar
    Respuestas
    1. Hola Jesus
      Mira aca te dejo un demo (http://topazsystems.com/software/download/InfoPathDemo.pdf), la diferencia es que en el ejemplo el tiene la imagen en el unidad C: tu puedes asignar a una variable de tipo imagen y asignas a esa propiedad.

      Espero te aclare las dudas.

      Borrar
    2. hey disculpa!!!
      he tenido muchos problemas al intentar trabajar con las imagenes, crees q puedas publicar un ejemplo... ?

      Borrar
  5. como serian las instrucciones UPDATE & DELETE ????

    ResponderBorrar
  6. Hola jesus
    Como te comene anteriormente el la linea 21 del código de ejemplo puedes colocar tu consutal Update o Delete

    SqlCommand cmd = new SqlCommand("SELECT * FROM Institucion WHERE Radicado = '" + ValorRadicado.ToString() + "'", conn);

    Asi como lo muestra el ejemplo en mi caso yo tengo el parametro que está en el campo ValorRadicado.

    Espero te ayude en tu desarrollo.
    Sdls.

    ResponderBorrar
  7. no pienses que no leeo tu blog, lo que pasó fue que respondiste un poco tarde ejejej. algo que quiero compartir es como agregar la librería
    (http://social.msdn.microsoft.com/Forums/getfile/174472) es que tarde como 2 días para agregarla ejjeje
    gracias (y)

    ResponderBorrar
  8. oye la verdad no entiendo para que es esto:

    reader[0]

    se que con eso se irteran los registros , pero q no los reader no son consecutivos es decir, del reader[0] te brincas hasta reader[2], me pudes explicar esa parte ??

    ResponderBorrar
  9. acerca de INSERT INTO; no me sale :( me baso en el código que tienes pero el INSERT INTO no queda, me ayudas

    ResponderBorrar

Publicar un comentario

Entradas más populares de este blog

Que es un Webpart o Elemento Web en SharePoint?

The type or namespace name ‘SharePoint’ does not exist in the namespace ‘Microsoft’ (are you missing an assembly reference?) – SharePoint 2013 Client Object Model dlls

Extender el periodo de Evalución hasta 240 días en SQL Server y SharePoint Server