我正在研究vb.net项目。我正在使用VS2010和SQL Server 2008。
我的数据库中有很多表,其中包括members
和bank
。
members
包含列:id_member, name, mobile, tel
bank
包含id_bank, name_bank
然后我创建了member_bank
表,其中有两列:members.id
和bank_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 :(得分:2)
这里的部分技巧是你希望所有这些都作为单个交易的一部分发生。值得庆幸的是,通过在“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语句中包含用户输入的数据。
不可以跳过这个,因为你还在学习。和
不可以先“让它工作”,然后再回过头来解决安全问题
答案 1 :(得分:0)
我假设你想在插入后从members表中返回memberid?如果是这样,您需要查看SCOPE_IDENTITY()
。这应该返回插入到作用域表中的最后一个标识。
这是一篇好文章:
http://msdn.microsoft.com/en-us/library/ms190315.aspx
我会提供代码,但我并不理解你的代码。
祝你好运。