2017-03-28 6 views
-1

私はこの変換に直面している失敗しました。選択したすべての日付をカレンダーで取得し、選択した日付にイベントを表示したい。私は選択された日付を取得することができますが、私は開始日を取得しようとする=選択した日付に。以下のエラーで失敗しました。文字列から日付および/または時刻を変換するときに変換に失敗しました。 SQLで

追加情報:文字列から日付および/または時刻を変換すると変換に失敗しました。

strSQL = " SELECT CalendarID, Company,Header, convert(date,enddate,103)StartDate, convert(varchar,enddate,103) enddate, (starthour + ' : ' + startmin + ' : ' + startday) starttime, (endhour + ' : '+ endmin+ ' : '+ endday) endtime " & _ 
        "FROM tablename where StartDate ='" & calendar1.SelectedDate.ToShortDateString() & "'" 

私はこれにコードを変更しようとしているだけでなく、同じエラーを持つ

Dim selecteddates As Date 
     selecteddates = calendar1.SelectedDate.ToShortDateString() 

strSQL = " SELECT CalendarID, Company,Header, convert(date,enddate,103)StartDate, convert(date,enddate,103) enddate, (starthour + ' : ' + startmin + ' : ' + startday) starttime, (endhour + ' : '+ endmin+ ' : '+ endday) endtime " & _ 
        "FROM tablename where StartDate =CAST('" & selecteddates & "' AS DATE) " 
+4

これはコーディングの悪い方法です。 SQLクエリでは連結しないでください。それは脆弱です。パラメトリッククエリを使用することをお勧めします – Sankar

+4

ADO.Netは既に.NETの「DateTime」をSQL Serverの「datetime」(または「datetime2」)に変換する方法を知っているため、Sankarの言葉に加えて、 'など)のデータ型であるため、日付を*文字列*としてレンダリングする必要はなく、書式設定の問題を解消できます。 –

答えて

1

正解(S)は、すでにコメントで与えられています。ここでサンプルコードを追加するだけです。

Dim strSQL As String = <sql>SELECT CalendarID, Company,Header, 
      convert(date,enddate,103) StartDate, convert(varchar,enddate,103) enddate, 
      (starthour + ' : ' + startmin + ' : ' + startday) starttime, 
      (endhour + ' : '+ endmin+ ' : '+ endday) endtime 
      FROM mytablename 
      where StartDate >= @dtStart and StartDate < @dtEnd 
      </sql> 

Dim tbl As New DataTable() 
Using con As New SqlConnection("server=.\SQLExpress;Database=MyDatabase;Trusted_Connection=yes") 
    Using cmd = New SqlCommand(strSQL, con) 
     cmd.Parameters.Add("@dtStart", SqlDbType.DateTime).Value = calendar1.SelectedDate.Date 
     cmd.Parameters.Add("@dtEnd", SqlDbType.DateTime).Value = calendar1.SelectedDate.Date.AddDays(1) 
     con.Open() 
     tbl.Load(cmd.ExecuteReader()) 
     con.Close() 
    End Using 
End Using 
関連する問題