c# - 将 C# 中的列表与数据库中的表进行比较
问题描述
我需要将从 C# Windows 窗体创建的连续整数列表与整数数据库表进行比较,指示是否存在重复项。
我有一个可用的版本,如下所示,但我假设它可能是最不有效的方法 - 将 C# 列表与数据库表中的每个整数一一进行比较。
我是否应该将数据库中的整数导入 C#,然后进行比较?或者有没有sql的询问方式:
如果列表 A 中的任何项目包含在列表 B 中,等等....而不逐一比较每个数字?
我已经看到很多关于仅在数据库中查找 1 项的意见,但我需要一种有效的方法来将有时 5,000 或更多的 C# 列表与最终可能有数十万条记录的数据库表进行比较。
public static string VerifyManufacturingSerialOnly(int count, int beginning)
{
string duplicateSerials = "";
int currentSerial = beginning;
for (int i = 0; i < count; i++)
{
OleDbConnection connection = BadgeDatabaseDB.GetConnection();
string checkStatement
= "SELECT * "
+ "FROM SerialNumbersMFG "
+ "WHERE SerialNumber = @CurrentSerial";
OleDbCommand command =
new OleDbCommand(checkStatement, connection);
command.Parameters.AddWithValue("@CurrentSerial", currentSerial);
try
{
connection.Open();
OleDbDataReader dataReader =
command.ExecuteReader(CommandBehavior.SingleRow);
if (dataReader.Read())
{
duplicateSerials +=
"Serial # " +
currentSerial +
" already exists in order # " +
dataReader["OrderNumber"].ToString() + "\n";
}
else { }
}
catch (OleDbException ex)
{
throw ex;
}
finally
{
connection.Close();
}
currentSerial++;
i++;
}
return duplicateSerials;
解决方案
两种方式:
- 从数据库 SELECT 中获取所有 id
SerialNumber FROM SerialNumbersMFG
,然后您可以使用 linqlist1.Intersect(list2)
- 正如评论中所发布的,大多数数据库都有该
IN
子句,因此您可以使用如下查询:SELECTSerialNumber FROM SerialNumbersMFG WHERE SerialNumber IN (1,2,3...)
这也将执行所需的操作。
既然您提到数据库可以有数十万条记录,我建议第二种方式更好。请stringbuilder
用于连接。
推荐阅读
- css - 变换旋转和填充行为
- azure-data-factory-2 - Azure 数据工厂增量加载 - 水印问题
- geometry - Pyglet 边框圆
- c++ - -s 在这段代码中的作用是什么,其中 s 是一个 char 指针?
- json - cURL 返回 JSON 数据
- docker - 在构建过程中无法访问绑定安装器卷的文件
- c++ - 使用 OOP 范式的账户类设计
- firebase - Firebase 分析自定义事件显示零用户,即使事件计数不为零
- json - 如何使用 PHP 和 CURL 编码外来字符以通过 API 导入到 shopify
- java - Wildfly 21 – 如何自定义 Bean Validation 异常的返回