基于这个VB代码,我得到了在我的SQL数据库中正确创建的所有东西,但不是在txtfoodid中显示的Food_ID,它会弹出一个消息框(我认为这是因为Try / Catch)。
Dim con As New OleDbConnection(DBcon)
Try
Dim dr As OleDbDataReader
Dim command As New OleDbCommand("Insert into Donation (Donor_ID) VALUES ( " & txtDonNum.Text & "); Select @@Identity;")
con.Open()
command.Connection = con
dr = command.ExecuteReader
Dim Donation_ID As String = ""
If dr.Read() Then
Donation_ID = dr(0).ToString
Dim food As New OleDbCommand("Insert into Food_Donation (Date_Received, Donation_ID) Values ( '" & maskedreceived.Text & "', " & Donation_ID & "); Select @@Identity")
food.Connection = con
dr = food.ExecuteReader()
'food.ExecuteNonQuery()
End If
Dim Food_ID As String
If dr.Read() Then
Food_ID = dr(0).ToString
txtfoodid.Text = dr("Food_ID").ToString
End If
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
con.Close()
End Try
MessageBox.Show("Food_ID has been made.")
End Sub
我尝试了多种方式让它显示但到目前为止没有任何工作。
答案 0 :(得分:1)
您正在引用列txtfoodid.Text = dr(“Food_ID”)。ToString但您的Select语句仅返回@@ Identity。
该读卡器没有返回Food_ID列。使用自己的阅读器创建新的Select查询或修改第二个语句以返回Food_ID列。
此外,您的代码非常容易受到SQL注入类型的攻击,并建议阅读Stop Sql Injection Attacks Before They Stop You
答案 1 :(得分:0)
Pepto大多是对的。唯一的是,您拥有所需的信息。基本上,只需改变这一行
txtfoodid.Text = dr("Food_ID").ToString
到
txtfoodid.Text = Food_ID
你会很高兴。您正在尝试从DataReader中读取Food_ID,并将其分配给变量Food_ID。