Почему это сравнение даты C # с SQL datetime не возвращает результаты?

1

Я знаю, что записи существуют между этим диапазоном дат в SQL, но я пробовал различные форматы и даже делал диапазон намного большим, и это все еще не возвращает результатов. Что я делаю неправильно в этом запросе, который не приводит к возврату записей? Спасибо за помощь.

DateTime today = DateTime.Now;
DateTime tomorrow = today.AddDays(1);
DateTime yesterday = today.AddDays(-1);

DateTime dt = DateTime.Now;
string yesterdayString = yesterday.ToString("yyyy-MM-dd HH:mm:ss");
string tomorrowString = tomorrow.ToString("yyyy-MM-dd HH:mm:ss");

int itemNum = 0;
string query = "select DocID, CNo, DocType, DocNumber from errordata where cno = '" + cno + "' and createddate > '" + yesterdayString + "' and createddate < '" + tomorrowString + "' order by '" + sorton + "'desc";
  • 4
    Предупреждение о внедрении SQL - вам не следует объединять свои операторы SQL - вместо этого используйте параметризованные запросы, чтобы избежать внедрения SQL
  • 0
    потому что вы должны использовать параметры в вашем запросе
Показать ещё 4 комментария
Теги:
datetime

3 ответа

3
Лучший ответ

Вы можете попробовать что-то вроде следующего:

string query = "SELECT DocID, CNo, DocType, DocNumber "+
               "FROM tableName "+
               "WHERE cno = @cno AND "+
               "CreatedDate BETWEEN @yesterday AND @tomorrow";

var sqlCommand = new SqlCommand(query, connectionString);

sql.Parameters.Add("@cno", cno);
sql.Parameters.Add("@yesterday", yesterday);
sql.Parameters.Add("@tomorrow", tomorrow);

Я думаю, что ваша проблема - отсутствующий FROM. Кроме того, я написал ваш запрос, используя параметры, которые предотвращают внедрение sql.

4

в запросе, который вы создаете, отсутствует предложение FROM. Я ожидаю, что вы получите исключение.

  • 2
    единственный ответ, который ответил на фактический вопрос (не то, что части о параметрах не важны)
  • 0
    скорее всего, не. если форматирование даты неверно, вы не получите результаты, если в предложении from отсутствует ожидаемый результат, это исключение. Тем не менее, хороший улов, чтобы увидеть предложение from отсутствует.
Показать ещё 4 комментария
3

Если вы используете параметризованные запросы, у вас не будет этой проблемы. См.: http://www.csharp-station.com/Tutorial/AdoDotNet/lesson06

ваш запрос должен выглядеть так:

@"SELECT VALUE Contact FROM AdventureWorksEntities.Contacts 
            AS Contact WHERE Contact.LastName = @ln" ;

обратите внимание на @placeholder для параметров, тогда вы можете это сделать:

// 2. define parameters used in command object
SqlParameter param  = new SqlParameter();
param.ParameterName = "@City";
param.Value         = inputCity;

// 3. add new parameter to command object
cmd.Parameters.Add(param);

// get data stream
reader = cmd.ExecuteReader();

но значение параметра может быть нормальным значением DateTime, например say DateTime.Today. это должно заставить вас начать.

Также проверьте исключения, которые вы можете получить. Недопустимый sql будет генерировать исключения. Поймайте их и исправьте sql при необходимости.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню