Явное значение для столбца идентификаторов в таблице «Таблица» можно указывать только в том случае, если используется список столбцов, а параметр IDENTITY_INSERT включен - PullRequest
1 голос
/ 03 марта 2011

Кто-нибудь знает, что это за ошибка (Явное значение для столбца идентификаторов в таблице 'HD_AANVRAAG_FASE' можно указывать только в том случае, если используется список столбцов, а IDENTITY_INSERT включен.

Описание: во время обработки возникла исключительная ситуациявыполнение текущего веб-запроса. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении: System.Data.SqlClient.SqlException: явное значение для удостоверенияСтолбец в таблице 'HD_AANVRAAG_FASE' можно указывать только в том случае, если используется список столбцов, а IDENTITY_INSERT включен.) означает?Любая помощь приветствуется.

private void Insert2()
    {
        SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["HELPDESK_OUTLOOKConnectionString3"].ToString());

        conn.Open();
        SqlCommand dCmd2 = new SqlCommand(
            "INSERT INTO HD_AANVRAAG_FASE VALUES (@fase_id, @aanvraag_id, @status_id, "
                + "@werknemer_id, @fase_datum) SET IDENTITY_INSERT HD_AANVRAAG_FASE OFF ",
            conn);



        dCmd2.Parameters.AddWithValue("@fase_id", 1);
        dCmd2.Parameters.AddWithValue("@aanvraag_id", 2622);
        dCmd2.Parameters.AddWithValue("@status_id", 15);
        dCmd2.Parameters.AddWithValue("@werknemer_id", 165);
        dCmd2.Parameters.AddWithValue("@fase_datum", "12-12-2001");
        dCmd2.ExecuteNonQuery();
        conn.Close();
    }

Ответы [ 3 ]

3 голосов
/ 03 марта 2011

Ваш код содержит

SET IDENTITY_INSERT HD_AANVRAAG_FASE OFF в конце

но не соответствует

SET IDENTITY_INSERT HD_AANVRAAG_FASE ON в начале

почему вы явно вставляете их? Это задача синхронизации?

3 голосов
/ 03 марта 2011

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

Обычно вы позволяете БД генерировать это;укажите столбцы в INSERT и , пропустите столбец идентификаторов (и не пытайтесь присвоить значение).Прямо после INSERT ваш новый идентификатор доступен как SCOPE_IDENTITY().

1 голос
/ 03 марта 2011

Вам не хватает

SET IDENTITY_INSERT HD_AANVRAAG_FASE ON

перед запуском вставки. Это точная причина ошибки.

Тем не менее, явная вставка значений идентификаторов встречается редко - например, используется только при копировании данных из одной таблицы в другую или при инициализации новой таблицы с явными идентификаторами. Обычно вы просто хотите пропустить значения идентификаторов из вашей INSERT, что также позволяет избежать ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...