2013-01-24 61 views
0

我正在研究vb.net項目。我正在使用VS2010和SQL Server 2008.同時插入到相關表中

我在我的數據庫中有很多表,其中有membersbank

  • members含有列:id_member, name, mobile, tel
  • bank包含id_bank, name_bank

然後創建member_bank表2列:members.idbank_id爲M:N這兩個表之間的關係。

如何在members中插入詳細信息並直接在member_bank表中將銀行ID加入會員ID?

我寫了這個代碼把它不起作用:

Dim saveok As Boolean = wnclass14.SQLExicute("Insert Into members (member_name,member_id,mobile,tel) values ('" & TextstdntName.Text & "','" & Textid.Text & "','" & TextMobile.Text & "','" & Texttel.Text & "')") 
If saveok = True Then 
     Dim saveok1 As Boolean = wnclass14.SQLExicute("Insert Into member_bank (id_member,id_bank) values (" & ComboBoxBank.SelectedValue & ") where member_bank.id_member=members.id") 

     If saveok1 = True Then ....... 
+0

我不知道是什麼'wnclass14'是,但無論哪種,他們已經拼錯'Execute'或者這不是你的實際代碼。你的意思是「不起作用」 - 錯誤信息?沒有任何影響? –

+1

Arrrrrgh!該代碼易受sql注入攻擊。你**不能**使用字符串連接來在你的sql命令字符串中包含輸入到用戶文本框中的數據。這太可怕了。如果我將文字「'; DROP表格成員」輸入到學生姓名字段中,該怎麼辦?想想會發生什麼。或者可能先備份你的數據庫,然後自己嘗試。然後去了解參數化查詢。 –

回答

0

我想,你希望你做一個插入後從成員表中返回的MEMBERID?如果是這樣,你需要看看SCOPE_IDENTITY()。這應該返回爲您的作用域插入到表中的最後一個標識。

這裏是一個很好的文章:

http://msdn.microsoft.com/en-us/library/ms190315.aspx

我提供的代碼,但我真的不明白你的。

祝你好運。這裏的伎倆

1

的是,你有種想所有這些發生作爲單個事務的一部分。值得慶幸的是,它並不難在一個調用你的「SQLExicute」功能發送多條語句來做到這一點(解決您的拼寫請):

wnclass14.SQLExicute(_ 
    "BEGIN TRANSACTION;" & _ 
    "DECLARE @NewID Int;" & _ 
    "INSERT INTO members (member_name, mobile, tel) " & _ 
     " VALUES ('..', '555-1234', '555-5678');" & _ 
    "SELECT @NewID = Scope_Identity();" & _ 
    "INSERT INTO member_bank (id_member, id_bank) " & _ 
     " VALUES (@NewID, '1234');" & _ 
    "COMMIT;) 

雖然我們在這裏,你真的需要修復此功能,以便它也要求參數數據。

它是不是可以使用字符串連接來包含用戶輸入的數據在您的SQL語句。
這是沒關係跳過這是因爲你還在學習。而
沒關係「剛剛得到它的工作」,然後再回去之後修復安全問題