我面临的一个问题是,在插入苹果产品数量之后,如何链接所有数据信息。例如,我插入有5个数量的苹果产品,然后添加5个,它将变成10个,表示产品苹果10个数量。现在我的代码只是显示10个数量,而不会显示产品苹果10个数量
Private Sub loadTransactions(ByVal transactionid As Integer)
Dim cmd As New OleDb.OleDbCommand
'open connection if it is not open yet
cnn.Open()
cmd.Connection = cnn
If Not cnn.State = ConnectionState.Open Then
'open connection
cnn.Open()
End If
Dim da As New OleDb.OleDbDataAdapter("SELECT s.cid as [ID], c.CheckerName as item_name, " & _
"s.CheckerName as [CheckerName], s.ShipQuantity as [StockQuantity], s.[Date] as [Date], s.CompanyName as [CompanyName], s.CheckerDetail as [CheckerDetail]" & _
" FROM stock s left join checker c on c.cid = s.checkercid where s.checkercid = " & transactionid & " ORDER BY s.cid", cnn)
cmd.CommandText = "INSERT INTO stock([CheckerDetail]) " & "VALUES('" & Me.txtdetail1.Text & "')"
Dim dt As New DataTable
da.Fill(dt)
Me.DataGridView1.DataSource = dt
Me.DataGridView1.Columns("item_name").HeaderText = "ItemName"
'close connection
cnn.Close()
End Sub
product quantity
apple 5
10
答案 0 :(得分:0)
将数据库对象保留在本地,以便您可以确保关闭并处置它们。连接是宝贵的资源。即使有错误,Using ... End Using
块也会执行此操作。
直到最后一刻才打开连接,并尽快将其关闭。将连接字符串传递给连接的构造函数。
将Sql字符串和连接传递给命令的构造函数
始终使用参数来防止Sql注入并简化Sql字符串的格式化。在Access中,参数名称无关紧要。它们在Sql字符串中出现的顺序必须与它们添加到Parameters集合的顺序匹配。
我认为您想更新Apple记录而不是插入全新的记录。您可以通过2种不同的方式执行此操作。一种方法是通过将值添加到字段中的现有值来更新数量字段。另一种方法是直接使用新数量进行更新。
Private Sub loadTransactions(ByVal transactionid As Integer)
Dim dt As New DataTable
Using cnn As New OleDbConnection("Your connection string")
Using cmd As New OleDbCommand("SELECT s.cid as [ID],
c.CheckerName as ItemName,
s.CheckerName,
s.ShipQuantity as [StockQuantity],
s.[Date],
s.CompanyName,
s.CheckerDetail
FROM stock s left join checker c on c.cid = s.checkercid
WHERE s.checkercid = @transactionID
ORDER BY s.cid", cnn)
cmd.Parameters.Add("transactionID", OleDbType.Integer).Value = transactionid
cnn.Open()
dt.Load(cmd.ExecuteReader)
End Using
End Using
DataGridView1.DataSource = dt
End Sub
Private Sub UpdateStock(transactionid As Integer)
Using cnn As New OleDbConnection("Your connection string")
Using cmd As New OleDbCommand("Update stock Set CheckerDetail = CheckerDetail + @detail WHERE checkercid = @transactionID;", cnn)
cmd.Parameters.Add("@detail", OleDbType.Integer).Value = CInt(txtdetail1.Text)
cmd.Parameters.Add("@transactionID", OleDbType.Integer).Value = transactionid
cnn.Open()
cmd.ExecuteNonQuery()
End Using
End Using
End Sub