Member 14005931 Ответов: 1

Я пытаюсь получить данные в соответствии с текущей датой


получение ошибки неправильного синтаксиса рядом с ')'.

Что я уже пробовал:

con.Open();


           SqlCommand cmd1 = new SqlCommand("SELECT [Description] FROM [tbl_Announcements] where Active = 1 AND ([ValidityDate] >= GetDate()",con);

           cmd1.Parameters.AddWithValue("@ValidityDate",SqlDbType.NVarChar).Value = Convert.ToString("yyyy/MM/dd hh:MM:tt:ss");


            SqlDataReader dr1 = cmd1.ExecuteReader();
           while (dr1.Read())
           {
               k = dr1["Description"].ToString();

           }
           Label2.Text = k;
               con.Close();

1 Ответов

Рейтинг:
0

OriginalGriff

Пара вещей.
1) Вы не используете параметр, который создаете в своем запросе, так зачем же вы его вообще создаете?
2) Вы пропускаете близкую скобку в этом SQL.
3) Если вы попытаетесь использовать этот параметр, он потерпит неудачу - при условии, что ваш столбец ValidityDate это поле DATE, DATETIME или DATETIME2, потому что строка "yyyy/MM/dd hh:MM:tt:ss" не является допустимой датой. "2018/10/03 10:40:33" есть, но "yyyy/MM/dd hh:MM:tt:ss" нет. Таким образом, SQL выдаст исключение...
4) в GetDate функция возвращает текущую дату и время на сервере - что может не иметь никакого отношения к дате на вашем компьютере, это зависит от того, где находится компьютер и как он был настроен, когда он был настроен. Вы должны использовать его только в том случае, если ваш ValidityDate колонка была вставлена и обновлена в терминах GetDate быть последовательным.
Я бы предложил вот что:

string sql = "SELECT Description FROM tbl_Announcements where Active = 1 AND ValidityDate >= @ValidityDate";
using (SqlCommand cmd1 = new SqlCommand(sql, con))
    {
    cmd1.Parameters.AddWithValue("@ValidityDate", DateTime.Now.Date);
    using (SqlDataReader dr1 = cmd1.ExecuteReader())
        {
        ...