Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ado.Net вставка уникальной записи. 
:(
    Опции темы
hexzo
Дата 30.3.2013, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 30.1.2011

Репутация: нет
Всего: нет



Если нужно добавить запись так, что бы она не повторялась, причём добавлять её будут пытаться из разных процессов. Как лучше всего это сделать? Что то меня смущает этот подход с исключениями.  smile 

Код

        public static void UniqueAdd(this SqlConnection con, int i, string name)
        {
            using (var tr = con.BeginTransaction(IsolationLevel.Serializable))
            {
                try
                {
                    var co = con.CreateCommand();
                    co.Transaction = tr;
                    co.CommandType = CommandType.Text;
                    co.CommandText = String.Format(@"INSERT INTO WALL(I,V) SELECT {0},'{1}' WHERE NOT EXISTS(SELECT TOP 1 I FROM WALL WHERE I = {0})", i, name);
                    co.ExecuteNonQuery();                    
                    tr.Commit();
                }
                catch(SqlException ex)
                {                    
                    tr.Rollback();
                    if(ex.Number == 1205)
                        Console.WriteLine("rollback " + i + " " + name);
                }
            }
        }

PM MAIL   Вверх
jonie
Дата 20.6.2013, 01:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 8
Всего: 118



сделать на колонке UNIQUE индекс (да он поди и есть уже), а в вашем случае исключение происходит по причине транзакций..
Какой уровень изоляции транзакций у вас стоит (mssql я так понимаю)?


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0423 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.