Выключите IDENTITY_INSERT для Набора данных, вставляют

Как насчет того, чтобы представить задержку, которая требует человеческого взаимодействия, как своего рода "игра КАПЧИ". Например, это могло быть немного флеш-игры, где в течение 30 секунд они должны разорвать разнообразившие шары и избежать разрывных твердых шаров (избегающий проблем дальтонизма!). Игре дали бы семя случайного числа и что игровые передачи назад к серверу были бы координатами и метками времени нажатых точек, наряду с используемым семенем.

На сервере Вы моделируете игровую механику с помощью того семени, чтобы видеть, разорвали ли щелчки действительно шары. Если они сделали, мало того, что они были человеческими, но и они заняли 30 секунд для проверки себя. Дайте им идентификатор сессии.

Вы позволяете тому идентификатору сессии сделать то, что он любит, но если выполняет слишком много запросов, они не могут продолжить, не играя снова.

27
задан Nathan Koop 11 August 2009 в 14:24
поделиться

5 ответов

Вы перепутали параметры:

SET IDENTITY_INSERT orders ON

включит возможность вставлять определенные значения (которые вы укажете) в таблицу со столбцом IDENTITY.

SET IDENTITY_INSERT orders OFF

Снова отключает это поведение и восстанавливает нормальное поведение (вы не можете указать значения для столбцов IDENTITY, поскольку они создаются автоматически).

Marc

53
ответ дан 28 November 2019 в 04:43
поделиться

Вы хотите сделать SET IDENTITY_INSERT ON , чтобы можно было вставлять столбцы идентификаторов.

Кажется, это немного назад, но так оно и работает.

]
5
ответ дан 28 November 2019 в 04:43
поделиться

Похоже, вы все делаете правильно: SET IDENTITY_INSERT orders ON - правильный способ для Сторона SQL Server . Но проблема в том, что вы используете наборы данных. Из предоставленного вами кода я могу сказать, что вы используете типизированный набор данных - тот, который был создан в Visual Studio на основе базы данных.

Если это так (наиболее вероятно), то этот набор данных содержит ограничение, которое не позволяет вам устанавливать значения для поля orderId, то есть это код, который не позволяет указывать явное значение, а не SQL Server. Вам следует перейти в конструктор набора данных и отредактировать свойства поля orderId: установите AutoIncrement и ReadOnly на false. Но те же изменения можно вносить во время выполнения.

3
ответ дан 28 November 2019 в 04:43
поделиться

Я бы использовал Profiler, чтобы определить, включен ли ваш SET IDENTITY_INSERT; выдается из того же соединения, что и ваши последующие вставки, а также точный SQL, выполняемый во время вставок.

1
ответ дан 28 November 2019 в 04:43
поделиться

AlexS был правильным, проблема заключалась в том, что Insert_Identity работал, но это настройка уровня соединения, поэтому мне нужно было установить Insert_Identity внутри транзакции.

Я использовал Райана Уитакера. TableAdapterHelper code

, и я создал команду обновления в своем tableadapter, которая запускала Identity_Insert. Затем мне пришлось создать новую команду Insert с указанным столбцом Identity. Затем я запустил этот код

SqlTransaction transaction = null;

try
{
     using (myTableAdapter myAdapter = new myTableAdapter())
     {   
         transaction = TableAdapterHelper.BeginTransaction(myAdapter);
         myAdapter.SetIdentityInsert();
         myAdapter.Insert(myPK,myColumn1,myColumn2,...);
     }

     transaction.Commit();
 }
 catch(Exception ex)
 {
     transaction.Rollback();
 } 
 finally
 {
     transaction.Dispose();
 }
1
ответ дан 28 November 2019 в 04:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: