#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.. Каждый браузер обрабатывает данные по-разному, поэтому вы можете ожидать разных результатов по проблемам с производительностью. Надеюсь, это поможет..