Как насчет того, чтобы представить задержку, которая требует человеческого взаимодействия, как своего рода "игра КАПЧИ". Например, это могло быть немного флеш-игры, где в течение 30 секунд они должны разорвать разнообразившие шары и избежать разрывных твердых шаров (избегающий проблем дальтонизма!). Игре дали бы семя случайного числа и что игровые передачи назад к серверу были бы координатами и метками времени нажатых точек, наряду с используемым семенем.
На сервере Вы моделируете игровую механику с помощью того семени, чтобы видеть, разорвали ли щелчки действительно шары. Если они сделали, мало того, что они были человеческими, но и они заняли 30 секунд для проверки себя. Дайте им идентификатор сессии.
Вы позволяете тому идентификатору сессии сделать то, что он любит, но если выполняет слишком много запросов, они не могут продолжить, не играя снова.
Вы перепутали параметры:
SET IDENTITY_INSERT orders ON
включит возможность вставлять определенные значения (которые вы укажете) в таблицу со столбцом IDENTITY.
SET IDENTITY_INSERT orders OFF
Снова отключает это поведение и восстанавливает нормальное поведение (вы не можете указать значения для столбцов IDENTITY, поскольку они создаются автоматически).
Marc
Вы хотите сделать SET IDENTITY_INSERT ON , чтобы можно было вставлять столбцы идентификаторов.
Кажется, это немного назад, но так оно и работает.
]Похоже, вы все делаете правильно: SET IDENTITY_INSERT orders ON - правильный способ для Сторона SQL Server . Но проблема в том, что вы используете наборы данных. Из предоставленного вами кода я могу сказать, что вы используете типизированный набор данных - тот, который был создан в Visual Studio на основе базы данных.
Если это так (наиболее вероятно), то этот набор данных содержит ограничение, которое не позволяет вам устанавливать значения для поля orderId, то есть это код, который не позволяет указывать явное значение, а не SQL Server. Вам следует перейти в конструктор набора данных и отредактировать свойства поля orderId: установите AutoIncrement и ReadOnly на false. Но те же изменения можно вносить во время выполнения.
Я бы использовал Profiler, чтобы определить, включен ли ваш SET IDENTITY_INSERT; выдается из того же соединения, что и ваши последующие вставки, а также точный SQL, выполняемый во время вставок.
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();
}