2016-05-07 5 views
0
 Dim sql As String = "SELECT * FROM old where inputdate BETWEEN '" + DateTimePicker2.Value.ToShortDateString() + "' AND '" + DateTimePicker3.Value.ToShortDateString() + "';" 
     Dim dataadapter As New SqlDataAdapter(sql, connection) 
     Dim ds As New DataSet() 
     connection.Open() 
     dataadapter.Fill(ds, "old_table") 
     connection.Close() 

У меня есть 2 DateTimePickers формата Short. В SQL имя столбца «inputdate» DataType: date. Когда я выбираю даты с днями < = 12, все работает нормально. Когда я выбираю даты с днями> 12, у меня возникает эта ошибка. Я вижу, что это вопрос дня и месяца, но я все еще не могу решить проблему. Любая помощь будет очень ценна "Конверсия удалось при преобразовании даты и/или времени из строки символовПреобразование даты в строку с DateTimePicker

+0

Когда вы говорите, что он работает с днями менее 12, вы не имеете в виду ошибок, или вы имеете в виду, что он правильно возвращает данные в этом диапазоне ?. Если SQL использует дни в течение нескольких месяцев, ваш результат не будет правильным результатом. – Crowcoder

+0

Я думаю, что у вас есть проблема с культурой. SQL-сервер может использовать результат 'ToShortDateString', но культура настроена на единицу, которая меняет месяцы и дни. У Абделлы есть хороший совет. – Crowcoder

+0

Что вы получаете, когда запускаете этот запрос в своей базе данных? 'select @@ LANGUAGE' – Crowcoder

ответ

0

Базовое решение заключается в том, что вы должны указать дату в формате mm/DD/YYYY или в формате даты YYYY-MM-DD в ms-sql-запрос.

Таким образом, перед передачей даты для запроса конвертируйте свою дату в формат mm/DD/YYYY или в формате ГГГГ-ММ-ДД.

+0

@Jad - Если столбец в sql-сервере является датой, тогда нет смысла передавать строку в запрос. Пожалуйста, см. Ответ Абделлы ниже. –

1

выходной формат ToShortDateString() не является допустимым для SQL-сервера и SQL смешивает дни с месяца

попробовать.. это

Dim sql As String = "SELECT * FROM old where inputdate BETWEEN '" + DateTimePicker2.Value.ToString("yyyy-MM-dd") + "' AND '" + DateTimePicker3.Value.ToString("yyyy-MM-dd") + "';" 

читать далее this больше информации

1

Попробуйте это:.

Dim dt1 as sring = String.Format("{0:yyyy/MM/dd}", Convert.ToDateTime(DateTimePicker2.Value.ToShortDateString())) 

    Dim dt2 as sring = String.Format("{0:yyyy/MM/dd}", Convert.ToDateTime(DateTimePicker3.Value.ToShortDateString())) 

Dim sql As String = "SELECT * FROM old where inputdate BETWEEN '" + dt1 + "' AND '" + dt2 + "';" 
     Dim dataadapter As New SqlDataAdapter(sql, connection) 
4

Я совет вам использовать Parameter использовать SqlDbType.DateTime, а затем передать DateTime непосредственно к параметру (не нужно конвертировать), а также избегать SQL инъекций, например:

Dim sql As String = "SELECT * FROM old where inputdate BETWEEN @startDate AND @endDate;" 
Dim cmd As New SqlCommand(sql, connection) 
cmd.Parameters.Add("@startDate", SqlDbType.DateTime).Value = DateTimePicker2.Value 
cmd.Parameters.Add("@endDate", SqlDbType.DateTime).Value = DateTimePicker3.Value 
Dim dataadapter As New SqlDataAdapter(cmd) 
Dim ds As New DataSet() 
connection.Open() 
dataadapter.Fill(ds, "old_table") 
connection.Close() 
+1

Это должен быть принятый ответ –

+0

Спасибо @AlexB.! –

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

  • Нет связанных вопросов^_^