Мне нужно сравнить список последовательных целых чисел, созданных из формы Windows на C #, с таблицей целых чисел в базе данных, указывающей на наличие дубликатов.
У меня есть версия, которая работает ниже, но я предполагаю, что это, вероятно, наименее эффективный способ сделать это - сравнивать список C # по одному с каждым целым числом в таблице базы данных.
Должен ли я получить целые числа из базы данных в C #, а затем сравнить?Или есть SQL-способ спросить:
, если какой-либо элемент в списке A содержится в списке B и т. Д .... без сравнения каждого числа один за другим?
I 'Я видел много мнений о поиске только одного элемента в базе данных, но мне нужен эффективный способ сравнения списков C #, иногда 5000 или более, с таблицей базы данных, которая может иметь сотни тысяч записей.
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;