Как dotNet обрабатывает параметризованные даты, когда программная дата не имеет времени, а sql дата имеет время - PullRequest
2 голосов
/ 16 июля 2010

Страшный заголовок, верно?Думаю, я увижу, что переполнение стека происходит быстрее, чем я тестирую что-то, пока я получаю тысячу прерываний от другой работы:)

Я обновляю старое сетевое приложение VB и пытаюсь реорганизовать часть логики видти.Приложение ищет данные за одну дату в нескольких таблицах и записывает это представление в файл.

При написании запроса в SQL я получу эквивалент

SELECT * FROM table
WHERE CAST(FLOOR(CAST(table.date AS float))AS datetime) = '15-Jul-2010'

В идеале ябы использовать

SELECT * FROM table WHERE date=@input

и добавить объект даты в качестве параметра к экземпляру System.Data.SqlClient.SqlCommand

Сравнимы ли эти два?Получу ли я ожидаемые результаты?

1 Ответ

3 голосов
/ 16 июля 2010

Да, эти два сопоставимы, библиотека SqlClient преобразует типы .net в типы sql. Вам все равно придется сократить часть времени в вашем sql-запросе, чтобы вы могли использовать что-то вроде:

SELECT * FROM table WHERE FLOOR(CAST(table.date AS float)) = FLOOR(CAST(@input AS float))

Вам не нужно конвертировать обратно в дату и время, вы можете просто сравнить числа с плавающей точкой.

...