c#
  • sql
  • sql-server
  • windows
  • 2013-08-21 2 views 1 likes 
    1

    строка s = @ "выберите * из Bill_Detail где DateTimeofBilling = '" + mcCalendar.SelectionStart.ToShortDateString()Уравнение даты и времени не возвращает значения. SQL Server 2008

    так у меня есть этот код. mcCalendar имеет значение «8/20/2013» из-за toshortdatestring. Мне просто нужно получить все строки с даты, mcCalendar.

    так

    выберите * из Bill_Detail где DateTimeofBilling = '8/20/2013'

    DateTimeofBilling на таблице базы данных типа DateTime данных. sqlserver 2008

    Почему я не могу получить строки, которые я ожидаю получить с помощью этого кода?

    ответ

    0
    string s = @"select * from Bill_Detail where DateTimeofBilling=CONVERT(date, '" + mcCalendar.SelectionStart.ToShortDateString() + "'); " 
    

    Должен делать то, что вы ищете (у вас не было закрытия в конце). Но да, параметризованные запросы являются БОЛЬШИМ лучшим способом.

    Посмотрите, возвращает ли следующий код. Если именование вашего поля является правильным, вы можете посмотреть его специально для '08/20/2013 12:00:00 'без преобразования.

    select * from Bill_Detail where CONVERT(date, DateTimeofBilling)='08/20/2013'; 
    
    2

    Мой догадка что ToShortDateString не фактически возвращая значение, которое вы хотите, чтобы в любом случае, по культурным причинам. Право исправить не изменить обработку текста - это использовать параметризованный запрос:

    string sql = "select * from Bill_Detail where [email protected]"; 
    using (var command = new SqlCommand(sql, conn)) 
    { 
        command.Parameters.Add("@QueryDate", SqlDbType.Date).Value = 
         mcCalendar.SelectionStart.Date; 
        // Execute the command 
    } 
    

    Всегда использование параметризованных запросов вместо построения SQL строку, содержащую значения:

    • It избегать SQL injection attacks
    • Он избегает проблем с преобразованием данных, подобных этому
    • Это помогает сохранить код (SQL,) отдельно от данных, что делает его легче увидеть, что происходит на
    +0

    @Volearix: Это не подходящее редактирование. Редактирование отлично подходит для * исправления * кода или опечаток и т. Д., Но не меняет * стиль * кода, потому что в этом случае вам не нравится использование 'var'. –

    +0

    Я бы просто хотел вставить. –

    +0

    @JeoTalavera: ну ваш текущий код вообще не делает вставки - он делает запрос. Непонятно, почему вы сейчас вставляете вставки, но вы должны использовать параметризованный SQL * либо * путь. –

    0

    Если ваш сервер настроен на дату стиля Великобритании (дд/мм/гггг) вместо стиля США (мм/dd/yyyy), то это может вызвать проблемы. Попробуйте указать дату в качестве «dd-mmm-yyyy».

    string queryDate = mcCalendar.SelectionStart.Date.ToString("dd-MMM-yyyy"); 
    string s = "SELECT * FROM Bill_Detail WHERE DateTimeofBilling = '" + queryDate + "'"; 
    
    +0

    Зачем использовать строковое представление вообще? Параметризованные запросы для победы, ИМО. –

    +0

    Это проще. Вы, вероятно, правы, хотя Джон, ваш, вероятно, ответ «better_». Однако мне не нравится использование var. – Erresen

    +0

    Использование 'var' является простым стилистическим выбором и не является существенным для ответа вообще. На самом деле, я не думаю, что код становится проще с помощью метода преобразования строк, лично - это, конечно, не проще * читать * с беспорядочными конкатенациями строк. –

    0

    Это происходит потому, что вы удалили элемент времени из своего предложения where.

    Например, если у вас есть значение: «8/20/2013 00:00:00», тогда он ожидает полный параметр DateTime.

    Есть несколько способов, которыми вы могли бы это исправить.

    1) Используйте следующий SQL:

    string s = @"select * from Bill_Detail where DateTimeofBilling like '" 
    + mcCalendar.SelectionStart.ToShortDateString() + "%'"; 
    

    ИЛИ

    2) Удалите "ToShortDateString", так что параметр вашего прохождения через это полная дата и время (mcCalendar.SelectionStart = 8/20/2013 00:00:00)

    string s = @"select * from Bill_Detail where DateTimeofBilling = '" 
        + mcCalendar.SelectionStart + "'"; 
    
    +0

    , но проблема во втором утверждении будет заключаться в том, что он будет приравнивать его к часу, мин и второму. Я просто хочу получать строки с определенной даты. –

    +0

    Когда ваши строки хранятся в базе данных, они имеют значение для временной части времени даты? Если это так, я бы сказал, попробуйте вариант 1, если нет, то не имеет значения, какой вариант вы решите попробовать . – Aaron

    +0

    "like" ddoesnt work on dat е время. он работает только на струне, я думаю –

    Смежные вопросы