C # cmd.ExecuteScalar (): «Невозможно продолжить выполнение, потому что сеанс находится в состоянии kill».

Получение странного исключения из ExecuteScalar() которое я не могу найти в Интернете:

Не удается продолжить выполнение, потому что сеанс находится в состоянии kill.

Я использую SqlConnection / SqlCommand

Команда является базовым INSERT INTO … с 105 столбцами (и 105 параметрами для установки данных столбца), за которыми следует SELECT SCOPE_IDENTITY ();

Я проверил строку подключения – это правильно, и соединение открыто.

Я даже не уверен, что эта ошибка говорит мне знать, с чего начать смотреть на эту.

Так что же означает эта ошибка? Как начинается сеанс в состоянии kill?

Код довольно прямолинейный:

 using (SqlConnection conn = new SqlConnection(connString)) { conn.Open(); using (SqlCommand cmd = new SqlCommand(@"INSERT INTO VendorNote (VendorId, AdminComment...) VALUES (@VendorId, @AdminComment, ...); SELECT SCOPE_IDENTITY(); ", conn)) { cmd.Parameters.AddWithValue("@VendorId", VendorId); cmd.Parameters.AddWithValue("@AdminComment", AdminComment); Id = (int) cmd.ExecuteScalar(); } } 

    НАЙДЕНО!

    В запросе было нарушение ограничений, которое вызывало сбой выполнения запроса. Вместо того, чтобы сообщать об этой информации в исключение – сообщалось, что сеанс находился в состоянии «убить» (я предполагаю), потому что запрос был прерван досрочно.

    Я никогда не видел эту ошибку раньше – обычно проблемы с ограничениями и, следовательно, имеют что-то более полезное в исключении.

    Таким образом, кто-нибудь получит эту ошибку – ДЕЙСТВИТЕЛЬНО проверьте ваш запрос, чтобы убедиться, что он действителен.

    Ваш код должен выглядеть так:

     const string sqlString = "INSERT INTO dbo.Table ( ....) " + " VALUES ( .... );" + "SELECT SCOPE_IDENTITY();"; using (conn) { using (var cmd = new SqlCommand(sqlString, conn)) { cmd.Parameters.AddWithValue("@param", param); cmd.CommandType = CommandType.Text; conn.Open(); return (int) (decimal) cmd.ExecuteScalar(); } } 

    Но заметьте, что хранимая процедура будет более подходящей

    Давайте будем гением компьютера.