Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Ado.Net вставка уникальной записи.


Автор: hexzo 30.3.2013, 14:27
Если нужно добавить запись так, что бы она не повторялась, причём добавлять её будут пытаться из разных процессов. Как лучше всего это сделать? Что то меня смущает этот подход с исключениями.  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);
                }
            }
        }

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)