none
Llenar columnas de DataTable con columnas de base de datos RRS feed

  • Pregunta

  • Que tal buen día, tengo el siguiente código que me llena un DataTable y lo muestra en un DataGrid pero ocupo arreglos y la funcion Random para llenar, quisiera saber de que maner llenar el datatable con registros que vienen desde la base de datos

    Imports System.Data
    Imports System.Data.Sql
    Imports System.Data.SqlClient
    Imports System.IO
    Imports System
    Imports System.Text
    Public Partial Class MainForm
    	Public Sub New()
    		' The Me.InitializeComponent call is required for Windows Forms designer support.
    		Me.InitializeComponent()
    		
    		'
    		' TODO : Add constructor code after InitializeComponents
    		'
    	End Sub
    	
    	Sub BtnCrearClick(sender As Object, e As EventArgs)
    		Dim IDColumna As New DataColumn(txtID.Text)
    		IDColumna.DataType=GetType(Integer)
    		IDColumna.AutoIncrement=True
    		
    		Dim Nombre As New DataColumn(txtNombre.Text)
    		Nombre.DataType=GetType(String)
    		
    		Dim App As New DataColumn(txtApp.Text)
    		App.DataType=GetType(String)
    		
    		Dim Apm As New DataColumn(txtApm.Text)
    		Apm.DataType=GetType(String)
    		
    		Dim TablaNombres As New DataTable(txtTabla.Text)
    		TablaNombres.Columns.Add(IDColumna)
    		TablaNombres.Columns.Add(Nombre)
    		TablaNombres.Columns.Add(App)
    		TablaNombres.Columns.Add(Apm)
    		
    		TablaNombres.Constraints.Add("Key1", IDColumna, True)
    		
    		Dim nombres As String()={"Aaron","Abel","Abelardo","Abraham","Adalberto","Adolfo","Adrian","Agustin","Alan","Alejandro",
    			"Benjamin","Bernardo","Baldomero","Baltasar","Barack"}
    		Dim apellidos As String()={"Pineda", "Bernal", "Espinoza", "Spindola", "Brisuela", "Gutierrez", "Escarcega", "Muñiz", "Lopez", "Martinez", "Piña",
    			"Vega", "Ortiz", "Barcenas", "Lopez", "Martinez"}
    		Dim paises As String()={"Estados Unidos","Mexico","Costa Rica","Jamaica","Panama","Haiti","Colombia","Venezuela","Ecuador","Peru",
    			"Bolivia","Chile","Brasil","Uruguay","Paraguay","Argentina"}
    		Dim aleatorio As New Random
    		
    		Dim row As DataRow
    		Dim i As Integer
    		For i=1 To Convert.ToInt32(txtFilas.Text)
    			row=TablaNombres.NewRow()
    			row(txtID.Text)=i
    			If cbo2.SelectedItem = "Nombres" Then
    				row(txtNombre.Text)=nombres(aleatorio.Next(0,nombres.Length))
    			ElseIf cbo2.SelectedItem = "A.Paterno"
    				row(txtNombre.Text)=apellidos(aleatorio.Next(0,apellidos.Length))
    			ElseIf cbo2.SelectedItem = "Países"
    				row(txtNombre.Text)=paises(aleatorio.Next(0,paises.Length))
    			End If
    			row(txtApp.Text)=nombres(aleatorio.Next(0,nombres.Length))			
    			row(txtApm.Text)=apellidos(aleatorio.Next(0,nombres.Length))
    			TablaNombres.Rows.Add(row)
    		Next
    		
    		tabla1.DataSource=TablaNombres
    	End Sub
    	
    	Sub BtnBaseClick(sender As Object, e As EventArgs)
    		Dim conexion As SqlConnection=New SqlConnection("Data Source=DESARROLLO-PC;" & _
    			"Initial Catalog=master;User Id=sa;Password=admin01")
    		Dim str As String="CREATE DATABASE " & txtBase.Text &" "
    		Dim comando As SqlCommand=New SqlCommand(str, conexion)
    		Try
    			conexion.Open()
    			comando.ExecuteNonQuery()
    			MessageBox.Show("La base de datos se ha creado correctamente", _
    				"Mi Programa", MessageBoxButtons.OK, _
    				MessageBoxIcon.Information)
    		Catch ex As Exception
    			MessageBox.Show(ex.ToString())
    		Finally
    			If (conexion.State=ConnectionState.Open) Then
    				conexion.Close()
    				End if
    		End Try
    	End Sub
    End Class
    Espero puedan ayudarme. GRACIAS

    martes, 7 de junio de 2016 2:16

Respuestas

  • Gspindola,

    Es mas simple de lo que ya has hecho:

    Using cn As New SqlConnection("CADENA_CONEXION")
    	Dim consultaSQL As String = "SELECT * FROM MiTabla"
    
    	Using da As New SqlDataAdapter(consultaSQL, cn)
                    'Instancias un objeto de tipo DataTable
    		Dim dt As New DataTable()
    
                    'Llenas los resultados de la consulta al objeto de tipo DataTable
    		da.Fill(dt)
    
                    'Es posible que el obejto de tipo DataTable lo asignes como fuente de datos de un objeto de tipo DataGridView		
                    DataGridView1.DataSource = dt
    	End Using
    End Using
    

    martes, 7 de junio de 2016 2:40
  • Hola:
        'Despues de que tengas cargado el datatable llamado TablaNombres
        'TU_TABLA tiene que tener la misma estructura que TablaNombres
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            lP_DataTableToTable(TablaNombres, "TU_TABLA")
        End Sub

        Private Sub lP_DataTableToTable(ByRef rdtDataTable As DataTable, ByVal vsTabla As String)
            For Each row As DataRow In rdtDataTable.Rows
                'Las filas recién agregadas se consideran filas insertadas
                row.SetAdded()
            Next
            Try
                Using loConexion As New SqlConnection("TU_CADENA_DE_CONEXION")
                    loConexion.Open
                    Using loDataAdapter = New SqlDataAdapter("Select * From " & vsTabla, loConexion)
                        Dim cmdBuilder As New SqlCommandBuilder(loDataAdapter)
                        loDataAdapter.Update(rdtDataTable)
                    End Using
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message, "lP_DataTableToTable", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
        End Sub

    Un saludo desde Bilbo
    Carlos
    martes, 7 de junio de 2016 5:41

Todas las respuestas

  • Buenas noches, como puedo insertar lo siguiente en una tabla de Sql Server
    Imports System.Data
    Imports System.Data.Sql
    Imports System.Data.SqlClient
    Imports System.IO
    Imports System
    Imports System.Text
    Public Partial Class MainForm
    	Public Sub New()
    		' The Me.InitializeComponent call is required for Windows Forms designer support.
    		Me.InitializeComponent()
    		
    		'
    		' TODO : Add constructor code after InitializeComponents
    		'
    	End Sub
    	
    	Sub BtnCrearClick(sender As Object, e As EventArgs)
    		Dim IDColumna As New DataColumn(txtID.Text)
    		IDColumna.DataType=GetType(Integer)
    		IDColumna.AutoIncrement=True
    		
    		Dim Nombre As New DataColumn(txtNombre.Text)
    		Nombre.DataType=GetType(String)
    		
    		Dim App As New DataColumn(txtApp.Text)
    		App.DataType=GetType(String)
    		
    		Dim Apm As New DataColumn(txtApm.Text)
    		Apm.DataType=GetType(String)
    		
    		Dim TablaNombres As New DataTable(txtTabla.Text)
    		TablaNombres.Columns.Add(IDColumna)
    		TablaNombres.Columns.Add(Nombre)
    		TablaNombres.Columns.Add(App)
    		TablaNombres.Columns.Add(Apm)
    		
    		TablaNombres.Constraints.Add("Key1", IDColumna, True)
    		
    		Dim nombres As String()={"Aaron","Abel","Abelardo","Abraham","Adalberto","Adolfo","Adrian","Agustin","Alan","Alejandro",
    			"Benjamin","Bernardo","Baldomero","Baltasar","Barack"}
    		Dim apellidos As String()={"Pineda", "Bernal", "Espinoza", "Spindola", "Brisuela", "Gutierrez", "Escarcega", "Muñiz", "Lopez", "Martinez", "Piña",
    			"Vega", "Ortiz", "Barcenas", "Lopez", "Martinez"}
    		Dim paises As String()={"Estados Unidos","Mexico","Costa Rica","Jamaica","Panama","Haiti","Colombia","Venezuela","Ecuador","Peru",
    			"Bolivia","Chile","Brasil","Uruguay","Paraguay","Argentina"}
    		Dim aleatorio As New Random
    		
    		Dim row As DataRow
    		Dim i As Integer
    		For i=1 To Convert.ToInt32(txtFilas.Text)
    			row=TablaNombres.NewRow()
    			row(txtID.Text)=i
    			If cbo2.SelectedItem = "Nombres" Then
    				row(txtNombre.Text)=nombres(aleatorio.Next(0,nombres.Length))
    			ElseIf cbo2.SelectedItem = "A.Paterno"
    				row(txtNombre.Text)=apellidos(aleatorio.Next(0,apellidos.Length))
    			ElseIf cbo2.SelectedItem = "Países"
    				row(txtNombre.Text)=paises(aleatorio.Next(0,paises.Length))
    			End If
    			row(txtApp.Text)=nombres(aleatorio.Next(0,nombres.Length))			
    			row(txtApm.Text)=apellidos(aleatorio.Next(0,nombres.Length))
    			TablaNombres.Rows.Add(row)
    		Next
    		
    		tabla1.DataSource=TablaNombres
    	End Sub
    	
    	Sub BtnBaseClick(sender As Object, e As EventArgs)
    		Dim conexion As SqlConnection=New SqlConnection("Data Source=DESARROLLO-PC;" & _
    			"Initial Catalog=master;User Id=sa;Password=admin01")
    		Dim str As String="CREATE DATABASE " & txtBase.Text &" "
    		Dim comando As SqlCommand=New SqlCommand(str, conexion)
    		Try
    			conexion.Open()
    			comando.ExecuteNonQuery()
    			MessageBox.Show("La base de datos se ha creado correctamente", _
    				"Mi Programa", MessageBoxButtons.OK, _
    				MessageBoxIcon.Information)
    		Catch ex As Exception
    			MessageBox.Show(ex.ToString())
    		Finally
    			If (conexion.State=ConnectionState.Open) Then
    				conexion.Close()
    				End if
    		End Try
    	End Sub
    End Class
    Espero una respuesta. GRACIAS
    martes, 7 de junio de 2016 2:37
  • Gspindola,

    Es mas simple de lo que ya has hecho:

    Using cn As New SqlConnection("CADENA_CONEXION")
    	Dim consultaSQL As String = "SELECT * FROM MiTabla"
    
    	Using da As New SqlDataAdapter(consultaSQL, cn)
                    'Instancias un objeto de tipo DataTable
    		Dim dt As New DataTable()
    
                    'Llenas los resultados de la consulta al objeto de tipo DataTable
    		da.Fill(dt)
    
                    'Es posible que el obejto de tipo DataTable lo asignes como fuente de datos de un objeto de tipo DataGridView		
                    DataGridView1.DataSource = dt
    	End Using
    End Using
    

    martes, 7 de junio de 2016 2:40
  • Hola:
        'Despues de que tengas cargado el datatable llamado TablaNombres
        'TU_TABLA tiene que tener la misma estructura que TablaNombres
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            lP_DataTableToTable(TablaNombres, "TU_TABLA")
        End Sub

        Private Sub lP_DataTableToTable(ByRef rdtDataTable As DataTable, ByVal vsTabla As String)
            For Each row As DataRow In rdtDataTable.Rows
                'Las filas recién agregadas se consideran filas insertadas
                row.SetAdded()
            Next
            Try
                Using loConexion As New SqlConnection("TU_CADENA_DE_CONEXION")
                    loConexion.Open
                    Using loDataAdapter = New SqlDataAdapter("Select * From " & vsTabla, loConexion)
                        Dim cmdBuilder As New SqlCommandBuilder(loDataAdapter)
                        loDataAdapter.Update(rdtDataTable)
                    End Using
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message, "lP_DataTableToTable", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
        End Sub

    Un saludo desde Bilbo
    Carlos
    martes, 7 de junio de 2016 5:41