我正在使用 VB.Net 和 SQLite 数据库创建一个 Windows 应用程序。在我的一个获胜表单中,我曾经在单个事件下通过单独的 SQL 命令从两个表( ImpShpHeader
, )中检索数据。在文本框中检索数据,同时使用两个单独的 SQL 命令通过按钮单击事件检索和更新两个表的数据,一个命令是从文本框更新到我正在使用的但从更新到我正在使用的。从文本框更新为成功,但更新方式出现以下错误:多个基表不支持动态 SQL 生成。所以在这里我需要手动 SQL 命令来更新 DataGridView 中的任何更改。这是我的代码:ImpShpDetail
ImpShpHeader
ImpShpDetail
DataGridView
ImpShpHeader
DataGridView
ImpshpDetail
CommandBuilder
ImpShpHeader
CommandBuilder
'TO RETRIEVE DATA FROM TABLES
Private Sub txtContainerNo_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtContainerNo.KeyDown
If e.KeyCode = Keys.Enter Then
Try
con.Open()
cmdString = "SELECT * FROM ImpShpHeader WHERE container = '" & txtContainerNo.Text & "'"
ImpShpHeaderDA = New SQLiteDataAdapter(cmdString, con)
ImpShpHeaderDA.Fill(ImpShpHeaderDT)
txtContainer.Text = ImpShpHeaderDT.Rows(0).Item("container").ToString
txtContainer.Enabled = False
txtShipper.Text = ImpShpHeaderDT.Rows(0).Item("shipper").ToString
txtPackages.Text = ImpShpHeaderDT.Rows(0).Item("packages").ToString
txtETA.Text = ImpShpHeaderDT.Rows(0).Item("eta").ToString
cmdString = "SELECT item, description, shipqty FROM ImpShpDetail WHERE container = '" & txtContainer.Text & "'"
ImpShpDetailDA = New SQLiteDataAdapter(cmdString, con)
ImpShpDetailDA.Fill(ImpShpDetailDT)
dgvImpShpDetail.DataSource = ImpShpDetailDT
'STYLE AND APPEARENCE OF DATA GRID VIEW
dgvImpShpDetail.Columns(0).HeaderText = "Item No."
dgvImpShpDetail.Columns(1).HeaderText = "Description"
dgvImpShpDetail.Columns(2).HeaderText = "Ship Qty"
dgvImpShpDetail.RowHeadersVisible = False
dgvImpShpDetail.AutoSizeColumnsMode = DataGridViewAutoSizeColumnMode.DisplayedCells
dgvImpShpDetail.Columns(0).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
dgvImpShpDetail.Columns(1).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
dgvImpShpDetail.Columns(2).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
Catch ex As Exception
MsgBox("Ann error occured!" & vbCrLf & vbCrLf & ex.Message)
End Try
con.Close()
End If
End Sub
'TO UPDATE MULTIPLE TABLES
Private Sub btnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpdate.Click
dlgResult = MessageBox.Show("Do you want to save the changes?", "Confirmation", MessageBoxButtons.YesNo)
If dlgResult = DialogResult.Yes Then
Try
con.Open()
cmdString = "UPDATE ImpShpHeader SET container = @container, shipper = @shipper, packages = @packages, eta = @eta WHERE container = '" & txtContainer.Text & "'"
cmd = New SQLiteCommand(cmdString, con)
cmd.Parameters.Add("@container", SqlDbType.VarChar).Value = txtContainer.Text
cmd.Parameters.Add("@shipper", SqlDbType.VarChar).Value = txtShipper.Text
cmd.Parameters.Add("@packages", SqlDbType.VarChar).Value = txtPackages.Text
cmd.Parameters.Add("@eta", SqlDbType.VarChar).Value = txtETA.Text
cmd.ExecuteNonQuery()
cmdbl = New SQLiteCommandBuilder(ImpShpDetailDA)
ImpShpDetailDA.Update(ImpShpDetailDT)
MsgBox("Updated successfully!")
Catch ex As Exception
MsgBox("An error occured!" & vbCrLf & vbCrLf & ex.Message)
End Try
con.Close()
End If
End Sub