Во-первых, ваш SQL ужасен.
Вы возвращаете слишком много данных и используете неявное соединение (когда явные объединения являются частью ANSI-SQL уже почти 30 лет!)
Во-вторых, Можем ли мы прекратить использовать AddWithValue () уже?
Вместо всего этого кода вы можете выполнить весь тест на SQL и вернуть единственное значение:
string sql =
@"SELECT CASE WHEN EXISTS
(
SELECT 1
FROM SuspensionRecord
WHERE User_ID = @User_ID
AND End_Date_Suspension >= CAST(GETDATE() AS DATE)
) THEN 1 ELSE 0 END";
Тогда вы можете использовать ExecuteScalar
вместо ExecuteReader
, и вам не нужно перебирать все ненужные данные:
using (SqlCommand cmd2 = new SqlCommand(timestamp, con))
{
cmd2.Parameters.Add("@User_ID", SqlDbType.Int).Value = Session["UserID"];
if ((int)cmd2.ExecuteScalar() == 1)
{
lblMessage.Text = "The account's status is suspended.";
lblMessage.Visible = true;
}
}