簡體   English   中英

將 DataGridView 數據保存到 Access 數據庫

[英]Save a DataGridView data to Access database

我正在嘗試將 DataGridView 數據保存到 Access 數據庫(數據庫已連接到 Visual Studio)。

這是我的代碼:

Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click

    Try

        Dim cn As OleDbConnection
        cn = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source= |DataDirectory|\GEFORSERVI V2.1.accdb;")

        cn.Open()

        Dim cmd As New OleDbCommand

        cmd.Connection = cn

        cmd.CommandType = Data.CommandType.Text

        Dim Strcommandtext As String = "inserto into Factura(Designacao,PrecoUnitario,Qtd,Total,Nome,Entidade,NIF,Telefone,Morada,CodigoProduto,DataEmissao) VALUES(@Servico_Produto,@Valor,@Qtd,@Total,@Nome,@Entidade,@NIF,@Telemovel,@Bairro,@Data_de_Emissao)"

        Dim values As String = ""

        For i As Integer = 0 To Factura2DataGridView.Rows.Count - 1
            values = Strcommandtext & Factura2DataGridView.Rows(i).Cells(11).Value & ")"

            cmd.CommandText = values

            cmd.ExecuteNonQuery()

        Next i

        cmd = Nothing

        cn.Close()

        MsgBox("Your Record Inserted Successfully ")

    Catch myException As Exception

        MsgBox("No Record Inserted" + myException.ToString())

    Finally

        'MsgBox("Closing Connection")

    End Try

End Sub

Connection s 和Command s 需要被處理,以便它們可以釋放非托管資源。 Using...End Using塊是處理這個問題的最好方法,因為即使有錯誤它也會這樣做。 在這段代碼中,連接和命令都包含在Using塊中。 請注意第一個Using行末尾的逗號。

CommandTextConnection直接傳遞給命令的構造函數。 我注意到您錯過了字段列表中的一個參數。 我也注意到你輸入了“inserto”。 我相信它必須是“插入”。 沒有必要設置CommandType因為CommandType.Text是默認值。

在 OleDb 中,參數出現在 sql 字符串中的順序必須與它們添加到參數集合中的順序相匹配。

在循環外構建參數集合。 只有參數的值在循環中發生變化。

在循環外打開連接一次。

Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    Try
        Using cn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source= |DataDirectory|\GEFORSERVI V2.1.accdb;"),
                cmd As New OleDbCommand("Insert into Factura(Designacao,PrecoUnitario,Qtd,Total,Nome,Entidade,NIF,Telefone,Morada,CodigoProduto,DataEmissao) 
                VALUES(@Servico_Produto,@Valor,@Qtd,@Total,@Nome,@Entidade,@NIF,@Telemovel,@Bairro,@CodigoProduto,@Data_de_Emissao)", cn)
            With cmd.Parameters
                .Add("@Servico_Produto", OleDbType.Integer)
                .Add("@Valor", OleDbType.VarWChar)
                .Add("@Qtd", OleDbType.Integer)
                .Add("@Total", OleDbType.Decimal)
                .Add("@Nome", OleDbType.VarWChar)
                .Add("@Entidade", OleDbType.VarWChar)
                .Add("@NIF", OleDbType.VarWChar)
                .Add("@Telemovel", OleDbType.VarWChar)
                .Add("@Bairro", OleDbType.VarWChar)
                .Add("@CodigoProduto", OleDbType.Integer)
                .Add("@Data_de_Emissao", OleDbType.Date)
            End With
            cn.Open()
            For i As Integer = 0 To Factura2DataGridView.Rows.Count - 1
                cmd.Parameters("@Servico_Produto").Value = Factura2DataGridView.Rows(i).Cells(0).Value
                cmd.Parameters("@Valor").Value = Factura2DataGridView.Rows(i).Cells(1).Value
                cmd.Parameters("@Qtd").Value = Factura2DataGridView.Rows(i).Cells(2).Value
                cmd.Parameters("@Total").Value = Factura2DataGridView.Rows(i).Cells(3).Value
                cmd.Parameters("@Nome").Value = Factura2DataGridView.Rows(i).Cells(4).Value
                cmd.Parameters("@Entidade").Value = Factura2DataGridView.Rows(i).Cells(5).Value
                cmd.Parameters("@NIF").Value = Factura2DataGridView.Rows(i).Cells(6).Value
                cmd.Parameters("@Telemovel").Value = Factura2DataGridView.Rows(i).Cells(7).Value
                cmd.Parameters("@Bairro").Value = Factura2DataGridView.Rows(i).Cells(8).Value
                cmd.Parameters("@CodigoProduto").Value = Factura2DataGridView.Rows(i).Cells(9).Value
                cmd.Parameters("@Data_de_Emissao").Value = Factura2DataGridView.Rows(i).Cells(10).Value
                cmd.ExecuteNonQuery()
            Next
        End Using
        MsgBox("Your Record Inserted Successfully ")
    Catch myException As Exception
        MsgBox("No Record Inserted" + myException.Message)
    End Try
End Sub

有更簡單的方法可以做到這一點。 如果您有一個綁定到DataGridViewDataTable ,您可以使用DataAdpater.Update方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM