2017-03-07 131 views
0

我遇到了一个问题,它告诉我我有一个无效的SQL语句;预期'DELETE','INSERT','PROCEDURE','SELECT'或'UPDATE'。vb.net外键插入sql语句

我试图插入使用外键的数据。

表pemain包含 ID MABOPA PKBM MBA MBEIA PPPBBM MAPIM

表阿赫利包含 ID COMPANY_NAME 名 地址 poscode 状态 电子邮件 电话 传真 company_reg 网站 言论 pemain

其中表阿赫利场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;") 

这将是,如果任何人一个真正伟大的可以帮助我。

+1

你的代码是T-SQL,并且远离Access SQL所理解的内容。你将不得不使用Access SQL完全重写。 – Gustav

回答

2

Jet和ACE OLE DB提供程序都不支持每个命令的多个SQL语句。如果你想执行多个SQL语句,那么你必须执行多个命令(或者多次使用不同的SQL语句执行相同的命令),如果你想把它们包装在一个事务中,你可以在你的OleDbConnection上调用BeginTransaction创建一个OleDbTransaction

顺便说一句,我不确定在Access中存在SCOPE_IDENTITY。我可能是错的,但我认为这是特定于SQL Server的。我认为Access需要使用@@IDENTITY

+0

是的,'Access'使用'@@ IDENTITY'。整个查询需要写作是诚实的,'Access'会在尝试着解决该怎么做的时候震惊! – David