我遇到一个问题,它告诉我我的SQL语句无效;预期'删除'插入'程序'选择'选择'或者'更新'。
我正在尝试插入使用外键的数据。
表pemain包含 ID MABOPA PKBM MBA MBEIA PPPBBM MAPIM
表Ahli包含 ID 公司名 名称 地址 poscode 州 电子邮件 电话 传真 company_reg 网站 备注 pemain
表Ahli中的字段pemain是表pemain的外键
使用的代码是
Dim Pos As Integer
Dim Pemain As Integer
Int32.TryParse(TxtBoxPoscode.Text, Pos)
Int32.TryParse(TxtBoxPemainId.Text, Pemain)
Access.AddParam("@MABOPA", TextBox1.Text)
Access.AddParam("@PKBM", TextBox2.Text)
Access.AddParam("@MBA", TextBox3.Text)
Access.AddParam("@MBEIA", TextBox4.Text)
Access.AddParam("@PPPBBM", TextBox5.Text)
Access.AddParam("@MAPIM", TextBox6.Text)
Access.AddParam("@companyname", TxtBoxComName.Text)
Access.AddParam("@name", TxtBoxName.Text)
Access.AddParam("@address", TxtBoxAdd.Text)
Access.AddParam("@poscode", Pos)
Access.AddParam("@state", CboBoxState.Text)
Access.AddParam("@email", TxtBoxEmail.Text)
Access.AddParam("@phone", TxtBoxPhone.Text)
Access.AddParam("@fax", TxtBoxFax.Text)
Access.AddParam("@companyreg", TxtBoxComName.Text)
Access.AddParam("@web", TxtBoxWebsite.Text)
Access.AddParam("@remarks", TxtBoxRemarks.Text)
Access.AddParam("@pemain", Pemain)
'Execute Insert Command
Access.ExecQuery(
"START TRANSACTION;" & _
"INSERT INTO pemain (MABOPA, PKBM, MBA, MBEIA, PPPBBM, MAPIM);" & _
"VALUES (@MABOPA, @PKBM, @MBA, @MBEIA, @PPPBBM, @MAPIM);" & _
"DECLARE @NewID INT;" & _
"SELECT @NewID = SCOPE_IDENTITY();" & _
"INSERT INTO Ahli (company_name, name, address, poscode, state, email, phone, fax, company_reg, website, remarks, pemain);" & _
"VALUES (@companyname, @name, @address, @poscode, @state, @email, @phone, @fax, @companyreg, @web, @remarks, @NewID);" & _
"COMMIT;")
如果有人能帮助我,那将是非常好的。
答案 0 :(得分:2)
Jet和ACE OLE DB提供程序都不支持每个命令多个SQL语句。如果要执行多个SQL语句,则必须执行多个命令(或使用不同的SQL语句多次执行相同的命令),如果要将它们包装在事务中,则在{{1}上调用BeginTransaction
创建OleDbConnection
。
顺便说一下,我不确定Access中是否存在OleDbTransaction
。我可能错了,但我认为这是SQL Server特有的。我认为Access需要使用SCOPE_IDENTITY
。