【问题标题】:ASP.NET C# loop to add records to multiple SQL tables stops unexpectedly without error将记录添加到多个 SQL 表的 ASP.NET C# 循环意外停止而没有错误
【发布时间】:2021-09-27 09:41:23
【问题描述】:

我有一些代码

  1. 查看表 A 中的最大 ID
  2. 从表 B 中获取 ID > 表 A 中最大 ID 的记录
  3. 循环遍历需要添加的每条记录(这些是表 A 中的记录吗????)
  4. 在表 C 中查找与表 B 中的 ID 相关的所有记录,并将这些记录插入表 D。

由于某种原因,在获取和插入一些记录后,循环意外停止,没有出错。它在随机阶段停止。有时它会添加 20 条记录,有时 100 条,有时 1000 条以上。这与我的逻辑有关还是可能是服务器设置? Web 应用程序 .Net Framework 4.5,托管在 Windows 2019 Server 上。

这是我遵循的逻辑。我特别不添加代码,因为它非常复杂,我想我会分享我遵循的逻辑,而不是就为什么会发生这种情况获得一些建议。

GetNewRecords()
  MaxIdA = Select max id in Table A
  Select all records in Table B with id > MaxIdA
  if reader has rows
    While reader.Read
    NextID = reader[0]
    AddNewRecordToTableB()
    Select all records in Table C where IdLink = NextID
    if reader2 has rows
      While reader2.Read
        NewDetail = reader2[..]
        AddNewRecordToTableD()
    Connection2 Dispose


AddNewRecordToTableB()
  Insert into TableB ….


AddNewRecordToTableD()
  Insert into Tabled ….

【问题讨论】:

  • 你做任何异常处理吗?如果没有,请添加异常处理。如果是这样,为了调试,请尝试重新抛出异常(例如:throw ex;
  • 听起来都可以在db中完成
  • 您可以在单个 SQL 批处理中完成所有这些操作,无需在代码中循环
  • 我会看看它是否内存不足或超时或类似情况。
  • @CaiusJard 我不确定如何在 SQL 中执行此操作。当记录添加到表 B 中时,有一个标识字段为输入的记录创建一个新的 id。我需要将此新 id 添加到表 D 中添加的记录中。表 B 是头文件,而表 D 具有表 B 中订单的详细信息行。

标签: c# asp.net sql-server


【解决方案1】:

我有一些代码查看表中的最大 ID,然后从第一个表中 ID > Max ID 的另一个表中获取记录。然后代码循环遍历它需要添加的每条记录,并在表 C 中找到与表 B 中的 ID 相关的所有记录,并将这些记录全部添加到表 D。

听起来像这样:

INSERT INTO d(column,list,here)
SELECT column,list,here --columns from b and c here
FROM
  b 
  JOIN c ON b.id = c.b_id
WHERE 
  b.id > (SELECT MAX(id) FROM a)

插入和选择中的列列表长度必须相同

我不确定您是否需要加入;如果 B 不需要数据(如果 C 包含所有需要的数据),则可以跳过 B:

INSERT INTO d(column,list,here)
SELECT column,list,here --columns from c here
FROM
  c
WHERE 
  c.b_id > (SELECT MAX(id) FROM a)

【讨论】:

    猜你喜欢
    • 2015-02-05
    • 1970-01-01
    • 2017-12-15
    • 2018-09-07
    • 2015-03-22
    • 2015-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多