2016-05-07 4 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では、DataType:dateの列名 "inputdate"です。 日時が< = 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形式またはYYYY-MM-DD形式に変換してください。

+0

@ Jad - SQL Serverの列が日付の場合、クエリに文字列を渡すのは意味がありません。下記のアブデラの答えをご覧ください。 –

1

ToShortDateString()の出力形式は、SQL Serverに対して有効ではありません、そして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

私のアドバイスあなたはSqlDbType.DateTimeを使用するParameterを使用して、パラメータ(変換する必要はありません)に直接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! –

関連する問題