2017-03-07 132 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