Non usare la concatenazione di stringhe per costruire le tue query sql, MAI!
Sei aperto per l'iniezione di sql, non ci sono scuse per questo. Invece usa i parametri 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)
Ora esci da questo metodo con un messaggio significativo se l'utente non ha fornito date valide. Puoi controllare validFromDate e validToDate che sono booleani. Il resto del codice viene eseguito 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
Ti ho appena visto usare varchar per memorizzare datetimes . Come mai? Correggilo nel database.