Conectarse con base SQL Server y Llenar DataGridView

En esta oportunidad vamos a ver como, de forma muy sensilla y con muy poco código, podemos establecer en visual basic .net una conexión con un servidor de SQL Server, en mi caso SQL Server Express 2005,  y luego de recuperar los datos de una de las tablas para llenar con ellos un DataGridView.

Lo primero que hay que hacer es importar dos espacios de nombres como muestro a continuación:

Imports System.Data
Imports System.Data.SqlClient

Para este ejemplo utilizaremos un formulario con un Botón (Button1) y un DataGridView (DataGridView1). En el evento click de button1 uno copiamos el siguiente codigo y modificamos algunos parámetros (Nombre o IP del Servidor, El Nombre de la base de datos y Nombre de la tabla en la instrucción SELECT) para que todo funcione bien.

Dim cnn As New SqlConnection("Data Source=MyServidor;Initial Catalog=MiBaseDeDatos;Integrated Security=SSPI;")

Dim da As New SqlDataAdapter("SELECT * FROM Productos", cnn)
Dim ds As New DataSet

da.Fill(ds)

DataGridView1.DataSource = ds.Tables(0)

Bueno, en realidad no hay mucho que explicar… se crea una conexión (cnn), luego un DataAdapter (da) que tiene como parámetro la instrucción para recuperar los datos (SELECT) y la conexión que debe utilizar (cnn). Si quieres seleccionar solo algunos registros deberás agregar una condición WHERE a la instrucción de selección.

En las lineas que siguen les dejo algunas breves definiciones por si a alguno le hicieran falta y para saber más de las distintas opciones para crear una conexión SQL Server 2005 les dejo también el siguiente link: http://www.connectionstrings.com/sql-server-2005.

DataAdapter

Representa un conjunto de comandos SQL y una conexión de base de datos que se utilizan para rellenar el objeto DataSet y actualizar el origen de datos.
DataAdapter actúa como puente entre DataSet y un origen de datos para la recuperación y el almacenamiento de datos. Para poder actuar como un puente, DataAdapter asigna el método Fill, que modifica los datos de DataSet de forma que coincidan con los del origen de datos, y asigna el método Update, que modifica los datos del origen de datos para hacerlos coincidir con los de DataSet.

DataSet

Representa una caché de memoria interna de datos. Es un componente fundamental de la arquitectura de ADO.NET. DataSet está compuesto por una colección de objetos DataTable.

DataTable

Representa una tabla de datos en memoria.
DataTable es un objeto central de la biblioteca ADO.NET. Entre los objetos que utilizan DataTable se incluyen DataSet y DataView.

Al obtener acceso a los objetos DataTable, hay que tener en cuenta que éstos distinguen entre mayúsculas y minúsculas condicionalmente. Por ejemplo, si un objeto DataTable se denomina “mydatatable” y otro “Mydatatable”, la cadena que se utilice para buscar una de las tablas se considerará que distingue entre mayúsculas y minúsculas. Sin embargo, si existe “mydatatable” pero no existe “Mydatatable”, se considerará que la cadena de búsqueda no distingue entre mayúsculas y minúsculas. Un objeto DataSet puede contener dos objetos DataTable que tengan el mismo valor para la propiedad TableName y distintos valores para la propiedad Namespace.<



52 Responses to “Conectarse con base SQL Server y Llenar DataGridView”

  1. [...] en el post anterior, de forma muy sensilla y con muy poco código, vamos a ver como establecer una conexión con un [...]

    • Harvy Vaneagas dice:

      Hola, pues en realidad tu publicacion me fue de mucha ayuda logre la coneccion sin mas errores y en verdad muchas gracias espero un dia devolverte el favor hasta pronto

  2. [...] de escribir el ejemplo de conexión a SQL Server y el de conexión a Microsoft Access me di cuenta de que a pesar de que estos son los dos tipos de [...]

  3. [...] mostrarles como podemos filtrar los registros de un datagridview. Este ejemplo está basado en este anterior, pero la diferencia radica en que en lugar de pasarle como datasource al datagridview una tabla, le [...]

  4. Armando Polledo dice:

    Hola, tengo una preguta veo que el metodo para recargar los datos en el datagridview son muy efecivos, entonces para que usar sirve el refresh o el update que ponen ues no actualiza los datos ni refresca simplemente no hace nada ya intenten varias formas de aplicarlo pero no se para que sirven. mi pregunta en concreto es para que sirve el update

    • Eliseo dice:

      Lo que estoy haciendo en este ejemple es leer datos de una consulta SQL y con ellos llenar un datagridview. Pero si cambio cualquiera de estos datos, solo lo hago en memoria. Esos cambios nunca van a la base de datos. Para ellos necesitaría usar Updatey para poder usarlo necesitaría crear el metodo update del SqlDataAdapter utilizando CommandBuilder. Pronto escribiré algún ejemplo al respecto.

  5. Marco Requejo dice:

    estoy trabajando un sistema de transportes, y nesecito filtrar la información de los conductores en un data grid que al escribir en un cuadro de texto un nombre y este al mismo tiempo se filtre y muestre en el data grid. Ejemplo. al empezar a escribir en el cuadro de texto la palabra Roger que se muestre en el datagrid todo los nombres con r.

  6. Carlos Cardozo dice:

    Boss.

    una pregunta como se declara digan el user y el pass? porq al hacer esto se conecta al SQL como un Invitado.

    Saludos.-

  7. ESTA BIEN dice:

    COMO HAGO PARA QUE UN PROGRAMA ME MUESTRE SI UNN DATO ESTA EN UNA BASE DE DATOS, EJEMPLO SI UNA PERSONASTA CON SOLO COLOCAR SU NUMERO DE CEDULA

    • AlbertoJ dice:

      Hola,
      Podrías poner un textbox en el cual se rellenaría el numero de la cédula
      y en el query:

      (”SELECT * FROM empleados where cedula=’” + Me.txtcedula.Text + “‘”, cnn)
      no tengo aquí el VB.net espero no equivocarme en la sintaxis.
      txtcedula seria el nombre de tu textbox
      Un saludo.

      • Héctor dice:

        Puedes corregirme este código?
        Dim das As New SqlDataAdapter(“SELECT Nombre,Precio,Cantidad FROM Productos inner join LineasProducto on Productos.IdProducto=LineasProducto.IdProducto where IdCliente=Me.cboClientes.SelectedItem and Fecha_Factura=me.cboFechas.SelectedItem”, conexion)

        Dim ds As New DataSet
        das.Fill(ds)
        DataGridView1.DataSource = ds.Tables(0)

        Mas que nada me gustaría corregir la sentencia select del sqladapter.Gracias.

  8. ESTA BIEN dice:

    SOY NUEVO EN ESTO

  9. Marin David dice:

    Oigan perdon por molestarles, pero tengo una duda y espero que alguien me responda porque es un poco urgente, Habra alguna forma de como llenar una tabla nueva con los datos que tengo en un datagridview, es decir lleno mi datagridview con una tabla “x” y despues de llenarlo con la tabla “x” esos datos que tiene mi datagridview de la tabla “x” quiero pasarlo a una nueva tabla “y”. ¿Se puede????????????????? auxilio.

  10. Erwin dice:

    Muy buen apunte

  11. Pablo dice:

    Tengo el siguiente problema, si yo uso la propiedad datasource del grid, esto me lo carga con los datos del dataset que vienen de la base de datos, como el ejemplo de arriba, ahora yo lo que quiero es modificar las columnas del datagrid como el ancho y esas cosas, entonces lo que hice fue añadir columnas al datagrid, pero ahora una vez compilo y corro el programa y uso el datagrid las columnas que añadi estan ahi, pero vacias!!
    y aparte de esas columnas,estan las que añadi gracias al dataset, ahora lo que quiero hacer es q las columnas que añadi y q estan vacias tengan los datos de las columnas que añadi por medio del datasource y desaparecer esas columnas… pero como?

    • Eliseo dice:

      Es un problema bastante común, pero nunca se explica como solucionarlo. La verdad es que merece un post completo para poder mostrar su funcionamiento, pero mientras te explico brevemente lo que debes hacer:
      1.- Crear un objeto con todos los campos de la tabla
      2.- Agregar un nuevo origen de datos utilizando el objeto anterior
      3.- En el datagridview seleccionar este origen de datos como datasource. Esto queará un objeto databinding
      4.- Edita las columnas del datagridview para ocultar, mostrar y formatear las columnas como tu quieras
      5.- Desde el código llena el datasource del objeto databinding

      bueno, espero que no te compliques demasiado con esto. Suerte.

      • Laura dice:

        Tengo el mismo problema y no entendí la solución!

        Yo formatié columnas con botones y combos, luego quiero agregar mis datos de un SQL para poder editarlos, básicamente necesito armar un ABM y quiero poder manejarlo todo desde la grilla. Cómo hago para que no se dupliquen las columnas y que los datos de la tabla me seleccionen el combobox?

  12. gina dice:

    Abra manera de poder sacar informacion de una base de datos y a la vez mostrarlo en pantalla como si fuera un ticket.???

    Voy comenzando en esto pero no me resulta

  13. Jose Cruz dice:

    Muchisimas gracias por tu auyda me sirvio de mucho.
    espero sigas asi compartinedo tus conocimientos para que los demas puedamos toarlos.

  14. legna dice:

    hola como puedo crear un formulario hijo en visual basic, por ejemplo presiono un boton y me muestre otro formulario

  15. Massey dice:

    Disculpaa..

    Agregar, Modificar y eliminar registros desde el mismo datagridview

    Con dataset, para que al momento de agregar modificar o eliminar, tambien se elimine de la bd.

    Gracas de antemanoo!

  16. Ricardo dice:

    Disculpen estoy utilizando visual 2008, la cadena de conexión la hago con el ADODB, lo cual importo esa Libreria “Imports ADODB” la conexión se realiza bien, pero cuando quiero llenar una datagridview no me funciona no se si habra que incluir otras cosas, por favor AYUDAAAA!!!!

  17. Cristian dice:

    Estoy trabajando con VB 2010, y cuando quiero mostrar el datagridview con la consulta ej. “SELECT column1 as ‘Nombre1, column2 as ‘Nombre2′ from table”
    el datagridview.datasource=dataset.table(0)
    el datagridview no me muestra la seleccion y me muestra la tabla en bruto, osea, se ve toda la tabla sin los alias, lo mismo me ocurre con la vista.
    Como soluciono este problema

  18. VJUNIOR dice:

    GRACIAS AMIGO CON ESOS PASO PUEDE APRENDER… SINCERAMENTE NO SABIA NADA ESTABA EN CERO…MUCHAS GRACIAS ……..

  19. imelda dice:

    hey gracias!

  20. Luis dice:

    Excelente el post, es algo bueno lo que haces. Sigue asi!….bueno, ahora la pregunta.
    Tengo un Datagridview llamado dgv_Aclaraciones, y le he puesto 3 columnas predeterminadamente(la primera es del tipo checkbox, la segunda un tipo textbox y la tercera es del tipo button), ya bueno, por otro lado en mi base de datos tengo una tabla “Aclaraciones” , con 2 campos , de los cuales solo me interesa uno, ya que ese es el que quiero mostrar en el datagridview.

    He intentado hacerlo con el datasource, pero lo que hace es adjuntar mas columnas al datagridview. Seria genial si tienes la respuesta, de todas maneras seguire investigando, gracias.

    Excelente post!! (otra vez!!…xD)

    • Luis dice:

      ya lo averigue, gracias de toas maneras..xD

      • Laura dice:

        Ay!! cómo hiciste??
        Tengo el mismo problema y no encuentro la solución!

        Yo formatié columnas con botones y combobox, luego quiero agregar mis datos de un SQL para poder editarlos, básicamente necesito armar un ABM y quiero poder manejarlo todo desde la grilla. Cómo hago para que no se dupliquen las columnas y que los datos de la tabla me seleccionen el combobox?

  21. Alexander Hernandez dice:

    buenas
    seria tan amable alguien indicarme como recuperar de una bd sql dos campos ejemplo nombres y el otro apellidos, en un texboxt como consulta.
    uso vb10 es urgente agradezco su colaboracion

  22. Osga dice:

    Hola, gracias por tu web, tengo una pregunta que pasa si son dos tablas las que quiero combinar para octener un solo datagrid tengo la consulta pero no me muestra los datos que puedo hacer. gracias

  23. cherry32 dice:

    Hola
    Seguí el ejemplo. No llena el dataridview, pone “No se controló System.IndexOutOfRangeException
    Message=No se puede encontrar la tabla 0.”
    ¿Qué podría estar sucediendo? ¿Mi dataset está vacío?

    • Eliseo dice:

      puede que el problema sea ese, que tu daaset no contenga ninguna tabla…
      Revisa bien el codigo y verifica que no estes confundiendo la variable del DataAdapter (da) por la del DataSet (ds) o algun otro error de tipeo.
      Al invocar el metodo Fill del DataAdapter se llena el DataSet ds con la tabla resultante de la consulta SQL.
      Realmente es muy poco código y muy fácil de entender. Revisalo y si no logras hacerlo funcionar barra todo y vuelve a comenzar. Seguro que funciona. ;)

  24. omar_judai dice:

    Hola como estan !!!
    el motivo de mi visita es para ver si me pueden ayudar
    la razon es q yo hice igual un programa en vb 2010 y sql server 2008
    todo estaba bien hasta que quise probar mi aplicacion en otra pc y me salio un erro al momento de quere guardar los datos, me salio

    No se puede abrir el archivo físico “C:\Users\omar\Documents\Visual Studio 2010\Projects\Proyecto de Costos\Proyecto de Costos\bin\Debug\Database1.mdf”. Error del sistema operativo 32: “32(failed to retrieve text for this error. Reason: 15105)”.
    No se puede abrir el archivo físico “C:\Users\omar\Documents\Visual Studio 2010\Projects\Proyecto de Costos\Proyecto de Costos\bin\Debug\Database1_log.ldf”. Error del sistema operativo 32: “32(failed to retrieve text for this error. Reason: 15105)”.
    No se puede abrir la base de datos ‘Database1′, porque no es posible tener acceso a archivos, o la memoria o el espacio en disco son insuficientes. Consulte el registro de errores de SQL Server. (Microsoft SQL Server, Error: 5120)

    la verdad no se porque salio este error
    sera por el nombre de la pc o usuario
    si mepudieran ayudar estaria muy agradecido

  25. Lugrarz dice:

    Solo algo q agregar, si cambias el system.data.sqlclient por un system.data.oledb visual t permitira hacer lo mismo con una conexion ole (como por ejemplo access)

  26. Pedro dice:

    Hola muy buen aporte!! tengo una pregunta como hago para que con solo poner mi contraseña y usuario en un formulario de login me aparescan los datos en mi datagri q esta en otro formulario???
    De ante mano muchas gracias!!!

  27. Luis Glez dice:

    Muy bien explicado pero que tal que uso esta conexión y la de Origenes de datos, y quiero crear un instalador de mi aplicacion en otras computadoras dentro de la misma red?

  28. CARLOS ESTRADA dice:

    Hola me gustaria saber si alguien me puede ayudar, tengo un programa hecho en visual basic 2010 en el que se conecta a un servidor y me compara la transferencia de mercancia de dos sucursales y me dice las diferencias que tengo entre ellas en un datagridview para que el encargado del deposito pueda revisar mas rapidamente de donde viene el error, funciona perfectamente en la sucursal principal porque la información esta centralizada, el problema es cuando lo hago en otra sucursal porque mi programa quiero que se conecte a dos servidores el local y el servidor de donde viene la información, como hago para conectarme a los dos servidores correr la consulta y que me muestre las diferencias en el datagridview. La consulta es Select cod_articulo, descripción, transferencia1, transferencia2 from (select cod_articulo, sum(n_cantidad) as transferencia1 where deposito= ‘uni03dpgp’ and c_concepto=’tra’ group by cod_articulo union select cod_articulo, sum(n_cantidad) as transferencia2 where deposito= ‘uni01′ and c_concepto=’tra’ group by cod_articulo ) from tr_inventario group by cod_articulo, descripcion. Algo así no la tengo aqui pero mas o menos es asi lo que hago es buscar en el mismo servidor las dos transferencia la de origen y la de destino agrupo los codigos de barra y luego sumo las cantidades a traves de union y me da el resultado, pero como deberia hacer para comparar dos servidores. Le agradezco al que me pueda ayudar.

  29. Mary dice:

    Necesito exportar un campo de una tabla a un textbox, he visto varias respuestas pero todas lo despleigan en un DataGridView y yo lo necesito mostrar en un textbox. Gracias por su ayuda.

  30. Mary dice:

    Hola necesito saber como consultar desde Visual el valor de un campo en una tabla de SQL y traerlo a Visual para asignarlo a una variable, incrementarlo y volverlo a guardar en la Base de Datos en SQL. Alguien me puede ayudar???? Me urge para continuar con un proyecto. Gracias!!!!

  31. free games at dice:

    It’s awesome to pay a quick visit this site and reading the views of all friends concerning this article, while I am also zealous of getting experience.

  32. Mateo dice:

    hola tengo una pregunta, tengo una tabla con una cantidad de valores x a los cuales les corresponde una fecha a cada uno….e intento hacer una consulta donde pueda sumar los valores correspondientes a cada mes creando las columnas correspondientes, ene, feb, mar, abr…etc…intente hacer un select que me trae inicialmente un nombre para categorizar los valores y en el segundo campo del select trate crear otro select que me sume los valores correspondientes a el mes de enero (teniendo en cuenta la fecha que esta ya en los datos….uso la clausula Between…) y hacer lo mismo para los demas meses, por ahora solo he intentado con enero pero no me sale…alguien me puede ayudar?

    lo que he echo hasta ahora es algo asi mas o menos…

    Responder:
    select nombre, (select sum(cantidad from tabla where fecha between ’2012-01-01′ and ’2012-01-31′) as Enero) from tabla order by nombre
    no estoy seguro de que asi sea por eso pregunto….

  33. Hunter Wise CFTC dice:

    Oh my goodness! Awesome article dude! Thank you so much,
    However I am going through problems with your RSS.
    I don’t know why I cannot join it. Is there anybody having identical RSS problems? Anybody who knows the answer can you kindly respond? Thanx!!

  34. Randall dice:

    Gracias amigo, justo lo que necesitaba!!!

  35. the benefits of water dice:

    It’s really a great and helpful piece of info. I’m happy that you simply shared this helpful info
    with us. Please stay us up to date like this. Thank you for sharing.

  36. facts About Gay Marriage dice:

    Wow, wonderful weblog layout! How lengthy have you ever been blogging for?

    you make running a blog look easy. The whole look of your website
    is wonderful, let alone the content!

  37. colorado interior design school dice:

    Sometimes, being perfective is an impossible action you use tobacco?
    Find more than please draw character of exercising and frequency.
    If yes, what whether you are an Online Wedding Planner or the
    bride to be.

  38. Hector dice:

    Hola muy buen aporte, quisiera hacer una pregunta. como para ir adjuntando los datos de una consulta ej.

    Dim da As New SqlDataAdapter(“SELECT * FROM Productos where ID=?”, cnn)

    datagridview1.row.add(????,???)

    para que cada vez que consulte agrege al datagridview sin borra los datos anteriores.

    gracias

  39. Anónimo dice:

    Hiya! I simply wish to give a huge thumbs up for the great
    information you

  40. Hernan dice:

    Muchas gracias, me cayo de perlas. Tengo una duda y no se si puedas ayudarme bueno son dos.

    La primera es ¿Como cambio el nombre de las columnas? Por que cuando lo cargo me aparece el nombre de mis columnas en sql

    2.- Como puedo eliminar desde vb una fila de datos de sql?

    Gracias de antemano me has salvado el semestre xD

  41. Johnf895 dice:

    I just ought to tell you which you have written an exceptional and distinctive post that I really enjoyed reading. Im fascinated by how nicely you laid out your material and presented your views. Thank you. dcabbefbkdaa

Comentar