ИСПОЛЬЗУЕТСЯ
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 за поправки.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
я делаю файловый менеджер на c#У меня возникла проблема(картинка прилагается)
Строится график значение по х от 0 до 1000Как конвертировать эти значение в DateTime? Нужно чтоб подписи на шкале были не (0, 100, 200
Необходимо удалить пробелы из объекта, через Trim() и Replace() - не получаетсяПишет, что ссылка на объект не указывает на экземпляр объекта