ИСПОЛЬЗУЕТСЯ
MySql
C#
Цель
Проверка на уникальность попадаемых данных в таблицу.
Сценарий
1. Код добавляет в таблицу БД в поле ssl_str ссылки типа /csharp-net-page2.html
Поле ssl_strиндексировано: UNIQUE INDEX ssl_str (ssl_str)
2. При попадании в поле неуникального значения код возвращает ошибку
MySql.Data.MySqlClient.MySqlException (0x80004005): Duplicate entry '/csharp-net-page2.html' for key 'ssl_str'
в MySql.Data.MySqlClient.MySqlStream.ReadPacket()
в MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int64& insertedId)
в MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId, Int32& affectedRows, Int64& insertedId)
в MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force)
в MySql.Data.MySqlClient.MySqlDataReader.NextResult()
в MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
в MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery()
Решение
1. Как сделать, чтобы try catch обрабатывало именно эту ошибку?
Т.е. если возвращается именно эта ошибка, то запись добавляется в другую таблицу.
2. Является ли такой способ оптимальным для решения задачи по определению уникальности добавляемой записи или есть другие способы более оптимальные?
Ловите соответствующий тип эксепшна:
try
{
// попытка записи в базу
}
catch (MySqlException ex)
{
if (ex.Number == 1586)
{
// обработка MySqlException исключения
}
else
{
throw;
}
}
Список всех кодов исключения можно найти здесь.
Является ли такой способ оптимальным для решения задачи по определению уникальности добавляемой записи или есть другие способы более оптимальные?
Можно и проверять на присутствие в БД самому, но, по-моему мнению, этот способ вполне действенный.
PS: Спасибо @Nikita и @Igor за поправки.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости