【问题标题】:how to insert same LAST_INSERT_ID() in one table to create multiple records;如何在一张表中插入相同的 LAST_INSERT_ID() 以创建多条记录;
【发布时间】:2017-06-21 08:40:11
【问题描述】:

我正在使用 ASP.NET、C# 以及 MYSQL 编写网站。 我需要能够记录具有相同 child_id 的两行;

我的问题是这一条语句,它插入一行并跳过最后一行。

   //data.ChldrenRecord.Service contain two records
   // babysit, and tutor
  foreach (string s in data.ChildrenRecord.Services)
  {
     query += (" INSERT INTO ServiceChildren SET service='" + s + "', child_id=LAST_INSERT_ID();");
  }

所以表格应该看起来像这样

 id   service    child_id
 1    babysit    1
 2    tutor      1

我使用 Last_INSERT_ID() 因为 child_id 是外键。我在另一个主键为 child_id 的表中创建了一条记录。之后,我使用 LAST_INSERT_ID() 来引用该记录主键 child_id 以便我可以在我的 ServiceChildren 表中使用它。

目前我的桌子看起来:

 id    service   child_id
 1     babysit   1

我认为我现在走在正确的轨道上。如果我直接登录到数据库,则此语句有效:

  SET @last_id = LAST_INSERT_ID();
 //then insert statements
  INSERT INTO ServiceChildren(service, child_id) VALUES('babysit', @last_id);
  INSERT INTO ServiceChildren(service, child_id) VALUES('tutor', @last_id);

但是在我的 C#、ASP.NET 代码中 SET @last_id = LAST_INSERT_ID(); 不做任何事情,甚至使用先前的插入语句填充表。

【问题讨论】:

  • 从上一个查询中获取 LAST_INSERT_ID 值并在循环中使用该值。但是考虑尽快切换到参数化查询。字符串连接只是等待发生的灾难(阅读关于 Sql Injection)
  • 顺便说一下,您正在使用 UPDATE 的语法。这永远不会与 INSERT 语句一起使用
  • 我不得不使用字符串连接,因为我找不到要在 ASAP 中使用的正确参数化查询。我知道这一点是因为它一直插入“@Service”而不是保姆或导师。

标签: c# mysql asp.net


【解决方案1】:

好的,我发现了我的问题。我需要在连接字符串中放置 Allow User Variables=True 以允许创建和使用 @last_id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-08
    • 2014-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    相关资源
    最近更新 更多