Простой пример того, что я пытаюсь выполнить:
Если у меня есть два диапазона чисел, таких как
beginA, endA (это диапазон, который я хочу сравнитьв базу данных, чтобы проверить на совпадение)
начало B, окончание B (это диапазон, который уже находится в базе данных)
Могу ли я сравнить их, чтобы найти перекрытие без зацикливания или создания списков (мойбаза данных будет неуправляемой, если я пойду этим путем)
Я могу заставить это работать, если я использую список для первого диапазона и имею таблицу, содержащую каждое число в качестве записи для второго диапазона.Однако таблица, которая будет содержать уже использованные серийные номера, в конечном итоге будет содержать миллионы строк, поэтому я пытаюсь избежать этого маршрута.
public static string VerifyManufacturingSerialOnly(int beginning, int ending)
{
OleDbConnection connection = BadgeDatabaseDB.GetConnection();
string checkStatement
= "SELECT OrderNumber, MfgBeginningSerial, MfgEndingSerial "
+ "FROM Orders "
+ "WHERE MfgBeginningSerial "
+ "BETWEEN @beginning AND @ending "
+ "OR MfgEndingSerial "
+ "BETWEEN @beginning AND @ending";
OleDbCommand selectCommand =
new OleDbCommand(checkStatement, connection);
selectCommand.Parameters.AddWithValue("@beginning", beginning);
selectCommand.Parameters.AddWithValue("@ending", ending);
// default string if no duplicates found
string duplicateSerials = "No duplicates found.";
try
{
connection.Open();
OleDbDataReader dataReader = selectCommand.ExecuteReader();
if (dataReader.Read())
{
duplicateSerials
= "There is overlap with: \n\n Order # "
+ dataReader["OrderNumber"].ToString()
+ "\n Serial #'s "
+ dataReader["MfgBeginningSerial"].ToString()
+ " - "
+ dataReader["MfgEndingSerial"].ToString();
}
}
catch (OleDbException ex)
{
throw ex;
}
finally
{
connection.Close();
}
return duplicateSerials;
}
Это возвращает строку, которая говорит, что естьперекрываются с заказом, даже если нет перекрытия.Возможно, это только мой синтаксис?