No utilice la concatenación de cadenas para crear sus consultas sql, ¡NUNCA!
Está abierto a la inyección de sql, no hay excusa para ello. En su lugar, utilice parámetros 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)
Ahora salga de este método con un mensaje significativo si el usuario no proporcionó fechas válidas. Puede verificar validFromDate
y validToDate
que son booleanos. El resto del código se ejecuta 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
Acabo de ver que usas varchar
para almacenar datetimes
. ¿Por qué? Arreglarlo en la base de datos.