将 DataGridView 内容重新保存到数据库中

问题描述 投票:0回答:1

我正在将 DataGridView 数据保存到运行正常的 SQL 数据库中。我想重新保存网格,但首先想从数据库中删除相同数量 PO 的现有行。为此,我在插入数据库之前使用了相同采购订单号的删除命令。

现在,如果插入过程中万一出现错误,它会删除现有行并显示错误。

我希望如果出现错误,删除程序将无法运行。如何检查这个?

Private Sub SaveData()
    Try
        DeleteData()

        Dim i As Integer
        Dim answer As Integer
        answer = MsgBox("Are you sure to save?", vbQuestion + vbYesNo + vbDefaultButton1, "Save Record")
        If answer = vbYes Then
            ConnecDatabase()
            Sql = "Operation_InsertPO"
            For i = 0 To DGV_PO.RowCount - 1
                    cmd = New SqlCommand
                    With cmd
                        .Connection = Conn
                        .Parameters.Clear()
                        .CommandType = CommandType.StoredProcedure
                        .CommandText = Sql
                        .Parameters.AddWithValue("@PONo", text_ponumber.Text)
                        .Parameters.AddWithValue("@ProductCode", DGV_PO.Rows(i).Cells(2).Value)
                        .Parameters.AddWithValue("@ProductName", DGV_PO.Rows(i).Cells(3).Value)
                        .Parameters.AddWithValue("@Units", DGV_PO.Rows(i).Cells(4).Value)
                        .Parameters.AddWithValue("@Qty", DGV_PO.Rows(i).Cells(5).Value)
                        .Parameters.AddWithValue("@Rate", DGV_PO.Rows(i).Cells(6).Value)
                        .Parameters.AddWithValue("@Amt", DGV_PO.Rows(i).Cells(7).Value)
                        .Parameters.AddWithValue("@User", GlobalVariables.UserName)
                        .ExecuteNonQuery()
                    End With
            Next
            cmd.Dispose()
            Conn.Close()
            MsgBox("Saved Successfuly", vbInformation)
        End If
    Catch ex As Exception
        MsgBox(ex.Message, vbCritical)
    Finally
        If Conn.State = ConnectionState.Open Then
            Conn.Close()
        End If
    End Try
End Sub

Private Sub DeleteData()
    Try
        ConnecDatabase()
        Sql = "Operation_DeletePO"
        cmd = New SqlCommand
        With cmd
            .Connection = Conn
            .Parameters.Clear()
            .CommandType = CommandType.StoredProcedure
            .CommandText = Sql
            .Parameters.AddWithValue("@pono", text_ponumber.Text)
            .ExecuteNonQuery()
        End With
        Conn.Close()
    Catch ex As Exception
        MsgBox(ex.Message, vbCritical)
    Finally
        If Conn.State = ConnectionState.Open Then
            Conn.Close()
        End If
    End Try
End Sub
sql-server vb.net datagridview
1个回答
0
投票
    Private Sub SaveData()
    Try
        Dim i As Integer
        Dim answer As Integer
        answer = MsgBox("Are you sure to save?", vbQuestion + vbYesNo + vbDefaultButton1, "Save Record")
        If answer = vbYes Then
            sql = "SET XACT_ABORT ON " & vbNewLine &
                  "BEGIN Tran Tran_Save " & vbNewLine &
                  "EXEC Operation_DeletePO @pono=" & text_ponumber.Text & vbNewLine
            For i = 0 To DGV_PO.RowCount - 1
                If Not DGV_PO.Rows(i).IsNewRow Then
                    sql += "EXEC Operation_InsertPO" &
                        "  @PONo=" & text_ponumber.Text &
                        ", @ProductCode=" & DGV_PO.Rows(i).Cells(2).Value &
                        ", @ProductName=" & DGV_PO.Rows(i).Cells(3).Value &
                        ", @Units=" & DGV_PO.Rows(i).Cells(4).Value &
                        ", @Qty=" & DGV_PO.Rows(i).Cells(5).Value &
                        ", @Rate=" & DGV_PO.Rows(i).Cells(6).Value &
                        ", @Amt=" & DGV_PO.Rows(i).Cells(7).Value &
                        ", @User=" & GlobalVariables.UserName & vbNewLine 'Environ("Username") 
                End If
            Next
            sql += "COMMIT TRAN Tran_Save"
            ConnecDatabase()
            cmd = New SqlCommand(sql, conn)
            cmd.ExecuteNonQuery()
            cmd.Dispose()
            conn.Close()
            MsgBox("Saved Successfuly", vbInformation)
        End If
    Catch ex As Exception
        MsgBox(ex.Message, vbCritical)
    Finally
        If conn.State = ConnectionState.Open Then
            conn.Close()
        End If
    End Try
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.