Ado.Net вставка уникальной записи.

 
0
 
.NET
ava
hexzo | 30.03.2013, 15: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);
                }
            }
        }
Kommentare (1)
ava
jonie | 20.06.2013, 01:15 #
сделать на колонке UNIQUE индекс (да он поди и есть уже), а в вашем случае исключение происходит по причине транзакций..
Какой уровень изоляции транзакций у вас стоит (mssql я так понимаю)?
Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
  jonie   hexzo
advanced
Absenden