将记录添加到多个 SQL 表的 ASP.NET C# 循环意外停止而没有错误

Posted

技术标签:

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

我有一些代码

    查看表 A 中的最大 ID 从表 B 中获取 ID > 表 A 中最大 ID 的记录 循环遍历需要添加的每条记录(这些是表 A 中的记录吗????) 在表 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 中订单的详细信息行。 【参考方案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)

【讨论】:

以上是关于将记录添加到多个 SQL 表的 ASP.NET C# 循环意外停止而没有错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 C# 和 ASP.NET 将数据从 Excel 文件导出到 SQL Server 表的最佳方法? [复制]

与实体框架 ASP.net MVC 中多个表的可选关系

c# asp.net,添加自定义控件

使用 ASP.Net 在 SQL 中对表的列值求和时出现异常

用于从 ASP .NET 更新表的动态 SQL

ASP.NET 按日期范围对多个 SQL 数据库表进行排序