Nie używaj konkatenacji ciągów do tworzenia zapytań sql, NIGDY!
Jesteś otwarty na wstrzyknięcie sql, nie ma na to usprawiedliwienia. Zamiast tego użyj parametrów sql:
Dim dateFrom as Date
Dim dateTo as Date
Dim validFromDate = Date.TryParse(Txtfromyear_reprt.Text.Trim(), dateFrom)
Dim validToDate = Date.TryParse(Txttoyear_reprt.Text.Trim(), dateTo)
Teraz wyjdź z tej metody z sensownym komunikatem, jeśli użytkownik nie podał prawidłowych dat. Możesz sprawdzić validFromDate
i validToDate
które są wartościami boolowskimi. Reszta kodu jest wykonywana If validFromDate AndAlso validToDate
:
Dim str As String = "select * from MYTABLE where Year >= @fromyear and Year <= @toyear"
da = New SqlDataAdapter(str, conn)
da.SelectCommand.Parameters.Add("@fromyear", SqlDbType.DateTime).Value = dateFrom
da.SelectCommand.Parameters.Add("@toyear", SqlDbType.DateTime).Value = dateTo
' now you can use da.Fill(ds, "MYTABLE") safely
Właśnie widziałem, że używasz varchar
do przechowywania datetimes
. Czemu? Napraw to w bazie danych.