VB.NET Insert DataGridView contents into Database

前端 未结 4 1549
粉色の甜心
粉色の甜心 2021-02-03 16:16

Problem:

I need to dump the contents of my DataGridView into a SQL Server Database Table. I\'ve got the datagridview loading fine, no problems there.

4条回答
  •  孤城傲影
    2021-02-03 16:29

    Well, you need to execute the command, not simply add to the DataAdapter
    Also, as it coded now, you don't need the DataAdapter at all.

    Dim connection As New Data.SqlClient.SqlConnection
    Dim command As New Data.SqlClient.SqlCommand
    
    connection.ConnectionString = "Server= server; Database= DB; integrated security=true"
    command.CommandText = "INSERT INTO  (Col1, Col2, Col3, Col4) VALUES (@Name, @Property, @Value, @Date)"
    
    command.Parameters.Add("@ServerName", SqlDbType.VarChar)
    command.Parameters.Add("@Property", SqlDbType.VarChar)
    command.Parameters.Add("@Value", SqlDbType.VarChar)
    command.Parameters.Add("@CaptureDate", SqlDbType.DateTime)
    connection.Open()
    command.Connection = connection
    
    For i As Integer = 0 To DataGridView.Rows.Count - 1
        command.Parameters(0).Value = dgvServerConfig.Rows(i).Cells(0).Value
        command.Parameters(1).Value = dgvServerConfig.Rows(i).Cells(1).Value
        command.Parameters(2).Value = dgvServerConfig.Rows(i).Cells(2).Value
        command.Parameters(3).Value = dgvServerConfig.Rows(i).Cells(3).Value
        command.ExecuteNonQuery()
    Next
    

    However this calls the database to insert one row at a time. I think it is better to look at the SqlDataAdapter.Update method that resolves the insert/update work with just one call.

    Using the SqlDataAdapter.Update method, requires that you save in a global variable the Adapter used at the moment in which you have filled the DataGridView and add a SqlCommandBuilder that generates for you the InsertCommand, UpdateCommand and DeleteCommand

        ' At form loading'
        Dim adapter As New OleDbDataAdapter()
        adapter.SelectCommand = New OleDbCommand("SELECT COL1, COL2,COL3,COL4 FROM TABLE", connection)
        Dim builder As OleDbCommandBuilder = New OleDbCommandBuilder(adapter)
        connection.Open()
        Dim myTable As DataTable = New DataTable
        adapter.Fill(myTable)
        DataGridView.DataSource = myTable
        ....
    
        ' at grid save'
        Dim myTable = CType(DataGridView.DataSource, DataTable)
        adapter.Update(myTable)
    

    提交回复
    热议问题