Проблема с предложением sql where при использовании datetime - PullRequest
0 голосов
/ 13 февраля 2012

Может кто-нибудь помочь мне с этим запросом, который я пытаюсь выполнить,

 static public DataTable GetAllCustomers()
{
    string sql = "Select * from [project] where [condition] = 0 AND [Time] < '" + DateTime.Now + "'";
    SqlDataAdapter da = new SqlDataAdapter(sql, ConnectionString);
    DataTable dt = new DataTable();
    da.Fill(dt);
    return dt;
}

Он ничего не возвращает

Любые идеи, где я получаю запрос неправильно.

Ответы [ 2 ]

6 голосов
/ 13 февраля 2012

Помещение DateTime в строки SQL - это путь к катастрофе благодаря форматированию и расположению. Измените строку sql на:

string sql = "Select * from [project] where [condition] = 0 AND [Time] < GetDate()";

При этом будет использоваться собственная текущая дата и время сервера в любом ожидаемом формате.

Если вам абсолютно необходимо что-то делать на стороне клиента, тогда используйте SqlCommand и вместо добавления DateTime в качестве строки вставьте «Time <@», а затем добавьте DateTime в качестве параметра команды. Это позволит избежать проблем форматирования, по крайней мере. </p>

2 голосов
/ 13 февраля 2012

Знаете ли вы, что SQL-сервер имеет встроенную функцию времени.Попробуйте это:

string sql = "Select * from [project] where [condition] = 0 AND [Time] < GETDATE()";

или если вы хотите, чтобы дата в UTC была сделана так:

string sql = "Select * from [project] where [condition] = 0 AND [Time] < GETUTCDATE()";

Таким образом, у вас нет строковых конкатенаций в коде.

ВозможноВы отвечаете следующее:

  1. Какая часть ничего не возвращает?
  2. Является ли [Time] DATETIME типом данных или аналогичным (то есть: не текстовым)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...