0

我的 sql 查询有问题。我想在第一个表中插入一些数据,然后将最后插入的 ID 复制到同一查询中的另一个表中。

我正在粘贴下面的代码,并希望有人会告诉我正确的方法,因为我得到了一些“;” 错误。

sqL = "INSERT INTO Narocilo(ID_stranke, datum_sprejema, rok_izdobave, status_narocila, dodal) " + " VALUES('" & txt_idstranke.Text & "','" & Format(datum_sprejem.Value, "d. MM. yyyy") & "','" & Format(datum_izdobava.Value, "d. MM. yyyy") & "','" & txtstatus.Text & "','" & cmb_zaposleni.Text & "'); INSERT into ZadnjiID(zvisaj) SELECT @@IDENTITY FROM Narocilo"
4

2 回答 2

3

Access (JET/ACE) 不允许在一个查询中使用多个 SQL 语句。您收到错误是因为您在分号后添加了第二条语句。你需要分解你正在做的事情。@@IDENTITY只要您不先终止连接,它仍然可以工作。例如:

 Dim conn As OleDb.OleDbConnection = New OleDb.OleDbConnection(connstr)
 Dim command As New OleDb.OleDbCommand
 conn.Open()
 command.Connection = conn

 command.CommandText = "INSERT INTO Narocilo(ID_stranke, datum_sprejema, rok_izdobave, status_narocila, dodal) " + " VALUES('" & txt_idstranke.Text & "','" & Format(datum_sprejem.Value, "d. MM. yyyy") & "','" & Format(datum_izdobava.Value, "d. MM. yyyy") & "','" & txtstatus.Text & "','" & cmb_zaposleni.Text & "');"

command.ExecuteNonQuery()
command.CommandText = "SELECT @@Identity"
Dim idd As Integer = command.ExecuteScalar
command.CommandText = "Your second INSERT statement using idd as the id here"
command.ExecuteNonQuery()
conn.Close()

@@IDENTITY只能在访问中使用整数类型的自动编号 - 而不是 GUID。附带说明一下,您确实应该对查询进行参数化以避免 SQL 注入攻击。

于 2013-10-10T10:25:29.003 回答
0

使用此代码。

 sqL = "INSERT INTO Narocilo(ID_stranke, datum_sprejema, rok_izdobave, status_narocila, dodal) " + " VALUES('" & txt_idstranke.Text & "','" & Format(datum_sprejem.Value, "d. MM. yyyy") & "','" & Format(datum_izdobava.Value, "d. MM. yyyy") & "','" & txtstatus.Text & "','" & cmb_zaposleni.Text & "'); INSERT into ZadnjiID(zvisaj); SELECT @@IDENTITY"

这将返回当前连接的主键自动增量列值。

如果此表具有标识列,则它将返回它的值。

但为此使用 SqlCommand.ExecuteScaler 以便它返回对象值,您可以将其用于另一个表。

谢谢你。

于 2013-10-10T09:30:12.200 回答