Я работаю над проектом Asp .Net. Поэтому у меня есть страница, где я генерирую случайные купонные ключи. Таким образом, пользователь вводит количество и генерирует.Вставить запрос внутри цикла for не работает правильно
Так что я сделал, я поставил цикл цикла в соответствии с количеством и внутри цикла for. Я создал случайный ключ и искал ключ в БД (ключ уникален), а затем вставлял данные в БД.
Код:
for (int i = 0; i < quantity; i++)
{
do
{
couponKey = generateKey();
} while (!SearchEpinKey(couponKey));
conn = new SqlConnection(connString);
conn.Open();
using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
string query = "INSERT INTO CouponStock (coupon_key, status, created_on)";
query += "VALUES('" + couponKey + "','Unused', GETDATE())";
cmd.CommandText = query;
cmd.ExecuteNonQuery();
}
conn.Close();
}
Внутри цикла, поток, как:
-Genrate random key
-Search if random key exists or not in db
-If found similar then again generate random key
-Insert the data in DB
Так что, когда я запускаю эту страницу для небольших количеств, как 10 или 15, его рабочего штраф. Но когда я иду на 50 или 100, он вставляет случайное число строк, например, когда-то 24, иногда 48. И приложение становится зависающим после этого. Я думаю, что сервер Sql поражает много времени в короткий промежуток времени. Любые рекомендации относительно того, как справиться с этим, будут полезны.
Что логика используется для генерации вашего случайного ключа? Возможно, вы сможете переместить весь этот процесс в хранимую процедуру. Это было бы намного проще, быстрее и точнее. –
@SeanLange Спасибо за идею, я поместил все данные в коллекцию и затем выполнил запрос. Я не знаю о параметре таблицы, но я буду искать в Интернете. – sumit
@SeanLange Если я использую ту же логику внутри процедуры, она будет работать правильно? – sumit