将记录添加到多个 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 表的最佳方法? [复制]