【问题标题】:insert into related tables in same time同时插入相关表
【发布时间】:2013-01-24 13:54:40
【问题描述】:

我正在开发 vb.net 项目。我正在使用 VS2010 和 SQL Server 2008。

我的数据库中有很多表,其中有membersbank

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

然后我创建了 member_bank 两列表:members.idbank_id 用于这两个表之间的 m:n 关系。

如何在members 中插入详细信息,并直接将会员ID 与member_bank 表中的银行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 .......

【问题讨论】:

  • 我不知道wnclass14 是什么,但要么他们拼错了Execute,要么这不是您的实际代码。 “不起作用”是什么意思 - 错误消息?一点效果都没有?
  • 哎呀!该代码容易受到 sql 注入的影响。您不能使用字符串连接将输入到用户文本框中的数据包含在您的 sql 命令字符串中。太可怕了。如果我在学生姓名字段中输入文本 ';DROP Table members;-- 会怎样?想想会发生什么。或者,也许先备份您的数据库并自己尝试一下。然后去了解参数化查询。

标签: sql vb.net sql-server-2008 insert


【解决方案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 语句中包含用户输入的数据。
可以跳过此内容,因为您仍在学习。和
可以先“让它正常工作”,然后再回去解决安全问题

【讨论】:

    【解决方案2】:

    我假设您想在插入后从成员表中返回成员 ID?如果是这样,您需要查看SCOPE_IDENTITY()。这应该返回为您的范围插入到表中的最后一个身份。

    这是一篇好文章:

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

    我会提供代码,但我不太了解你的代码。

    祝你好运。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-06
      相关资源
      最近更新 更多