- 001
- 002
- 003
- 004
- 005
- 006
- 007
- 008
- 009
- 010
- 011
- 012
- 013
- 014
- 015
- 016
- 017
- 018
- 019
- 020
- 021
- 022
- 023
- 024
- 025
- 026
- 027
- 028
- 029
- 030
- 031
- 032
- 033
- 034
- 035
- 036
- 037
- 038
- 039
- 040
- 041
- 042
- 043
- 044
- 045
- 046
- 047
- 048
- 049
- 050
- 051
- 052
- 053
- 054
- 055
- 056
- 057
- 058
- 059
- 060
- 061
- 062
- 063
- 064
- 065
- 066
- 067
- 068
- 069
- 070
- 071
- 072
- 073
- 074
- 075
- 076
- 077
- 078
- 079
- 080
- 081
- 082
- 083
- 084
- 085
- 086
- 087
- 088
- 089
- 090
- 091
- 092
- 093
- 094
- 095
- 096
- 097
- 098
- 099
- 100
private Duplicate CheckForDuplicate(object name, object surname, object patronymic, object birthday, object oldSurname, out List<long> duplicateRowIDs)
{
duplicateRowIDs = new List<long>();
DataTable _idDuplicateRowTable = new DataTable();
//Проверка на полные дубликаты
_idDuplicateRowTable = SqlWrapper.ExecuteQuery(
@"
SELECT id
FROM [Физические лица]
WHERE [Физические лица].Фамилия=@param0
AND [Физические лица].Имя=@param1
AND [Физические лица].Отчество=@param2
AND [Физические лица].[Дата рождения]=@param3
AND (( @param4 IS NOT NULL AND [Физические лица].[Старая фамилия]=@param4 )
OR (@param4 IS NULL AND [Физические лица].[Старая фамилия] IS NULL ))
",
surname, name, patronymic, birthday, oldSurname
).Tables[0];
if (_idDuplicateRowTable.Rows.Count == 1)
{
duplicateRowIDs.Add((long)_idDuplicateRowTable.Rows[0]["id"]);
return Duplicate.Fully;
}
//Несколько полных дубликатов
if (_idDuplicateRowTable.Rows.Count > 1)
{
foreach (DataRow duplicate in _idDuplicateRowTable.Rows)
{
duplicateRowIDs.Add((long)duplicate["id"]);
}
return Duplicate.SomeFullyDuplicates;
}
//Проверяем только ФИО+дата рождения
_idDuplicateRowTable = SqlWrapper.ExecuteQuery(
@"
SELECT id, [Старая фамилия]
FROM [Физические лица]
WHERE [Физические лица].Фамилия=@param0
AND [Физические лица].Имя=@param1
AND [Физические лица].Отчествo=@param2
AND [Физические лица].[Дата рождения]=@param3
",
surname, name, patronymic, birthday
).Tables[0];
if (_idDuplicateRowTable.Rows.Count == 1)
{
if (_idDuplicateRowTable.Rows[0]["Старая фамилия"].Equals(DBNull.Value) && oldSurname is String)//Если стар. фамилия в БД == null & в файле != null
{
duplicateRowIDs.Add((long)_idDuplicateRowTable.Rows[0]["id"]);
return Duplicate.OldSurnameDiff;
}
duplicateRowIDs.Add((long)_idDuplicateRowTable.Rows[0]["id"]);
return Duplicate.ErrOldSurname;
}
else if (_idDuplicateRowTable.Rows.Count > 1)
{
foreach (DataRow row in _idDuplicateRowTable.Rows)
{
duplicateRowIDs.Add((long)row["id"]);
}
return Duplicate.SomeBaseDuplicates;
}
return Duplicate.NonDuplicate;
}
private bool IsPotentilaDuplicate(object name, object surname, object patronymic, object birthday, object oldSurname)
{
bool _isPotentilaDuplicate = false;
//Проверяем, не станет ли строка дубликатом, после изменения
//Только по ФИО+дате рождения
DataTable _ponentialDuplicates1 = SqlWrapper.ExecuteQuery(
@"
SELECT id
FROM [Физические лица]
WHERE [Физические лица].Фамилия=@param0
AND [Физические лица].Имя=@param1
AND [Физические лица].Отчество=@param2
AND [Физические лица].[Дата рождения]=@param3
",
oldSurname, name, patronymic, birthday
).Tables[0];
//Полное совпадение
DataTable _ponentialDuplicates2 = SqlWrapper.ExecuteQuery(
@"
SELECT id
FROM [Физические лица]
WHERE [Физические лица].Фамилия=@param0
AND [Физические лица].Имя=@param1
AND [Физические лица].Отчество=@param2
AND [Физические лица].[Дата родения]=@param3
AND [Физические лица].[Старая фамилия]=@param4
",
oldSurname, name, patronymic, birthday, surname
).Tables[0];
if (_ponentialDuplicates1.Rows.Count > 0 || _ponentialDuplicates2.Rows.Count > 0)
{
_isPotentilaDuplicate = true;
}
return _isPotentilaDuplicate;}
Ну.... Проверка на дубликаты перед вставкой в БД. Сляпал его я, по методологии "давай-давай-быстрее!!!!а-а-а не успеваем", для показа заказчикам будущей функциональности. Сейчас переделываю с помощью паттерна Декоратор (т.к. нужно опционально проверка по ФИО+Дата рождения или СНИЛС или и то, и другое)+ввел табличку История изменений фамилий вместо столбца Старая фамилия
govnokoder1 13.01.2015 15:55 # 0
Fike 13.01.2015 16:43 # +3
guest 13.01.2015 17:03 # +1
А чо не с помощью LINQ и без SqlDataAdapter'ов?
Fike 13.01.2015 22:00 # 0
Совпадение? Не думаю.
guest 13.01.2015 22:06 # 0
Анонимус 13.01.2015 22:37 # 0
Vasiliy 14.01.2015 14:45 # 0
bormand 14.01.2015 15:44 # 0
Анонимус 14.01.2015 21:33 # 0
от героина такое бывает
inkanus-gray 15.01.2015 16:24 # 0
Анонимус 15.01.2015 16:28 # 0
bormand 14.01.2015 15:44 # 0
My little ponential.
> Potentila
> Дата родения
"Давай-давай-быстрее!!!!а-а-а не успеваем" в терминальной стадии...