ASP.NET зависает при вставке чисел с помощью элемента управления texbox

#c# #sql-server #textbox #sql-insert

#c# #sql-сервер #текстовое поле #sql-вставка

Вопрос:

Я использую asp.net 4.5, C # и SQL Express, с пятью текстовыми полями. Передаваемые значения представляют собой числа от 0 до 99. При вставке чисел с помощью ExecuteNonQuery система зависает на 30 секунд или более.

Во время отладки VS я проверил, что данные действительно записаны в базу данных, однако ExecuteNonQuery никогда не завершается.

Я пробовал несколько методов, включая преобразование (TryParse и Convert) с теми же результатами. Я также создал простую тестовую страницу всего с пятью текстовыми полями, но показывает ту же проблему. Эта проблема не работает как с жестким кодированием, так и с хранимой процедурой. Использование элемента управления SqlDataSource работает, но я предпочитаю кодировать с использованием C #. Поля используются только для чисел и будут вычисляться во время составления отчетов. Примечание: я предполагаю, что значение должно быть преобразовано из строки в INT.

Структура таблицы:

           [StatID] [int] IDENTITY(1,1) NOT NULL,
      [Made2PT] [int] NULL, [Missed2PT] [int] NULL,
  

Хранимая процедура:

 @Made2Pt Int, @Missed2pt Int        
          AS
          BEGIN
      INSERT INTO tblStatsV2(Made2Pt,Missed2pt)     
      VALUES (@Made2Pt,@Missed2pt)
  

C # код за образцом, частичная тестовая страница с двумя текстовыми полями:

 sqlCmd.CommandType = CommandType.StoredProcedure;
sqlCmd.Parameters.AddWithValue("@Made2Pt", txtMade2PT.Text == "" ? 0 : 
                                          Convert.ToInt32(txtMade2PT.Text));
sqlCmd.Parameters.AddWithValue("@Missed2pt",txtMade2PT.Text == "" ? 0 : 
                                          Convert.ToInt32(txtMissed2PT.Text));`
  

Частичный пример кода с другой страницы:

  cmd.CommandType = CommandType.StoredProcedure;
 if (int.TryParse(txt2ptMade.Text, out made2PT))
 {
          cmd.Parameters.Add("@Made2Pt", SqlDbType.Int).Value = made2PT;
 }
  

Я бы ожидал, что запись вернется менее чем за секунду, поскольку на других моих страницах есть быстрый ответ.

Комментарии:

1. В этом коде нет ничего плохого…. но вы правы, это должно дать почти мгновенный результат. Поэтому проблема должна быть где-то в другом месте.

2. То, что вы описываете, звучит подозрительно как тупик. Вы уверены, что не звоните ExecuteNonQueryAsync ?

Ответ №1:

Чего я не сделал, так это не проверил мою проблему в разных браузерах (Edge, Chrome, Opera …) .. Я исправил хранимую процедуру, добавив локальные переменные, но это не устранило проблему. Я обнаружил, что эта проблема не работает только с Microsoft Edge. После сканирования службы поддержки Microsoft одним из исправлений было удаление исправления KB.. Каждый браузер обрабатывает данные по-разному, поэтому вы можете ожидать разных результатов по проблемам с производительностью. Надеюсь, это поможет..