Nepoužívejte zřetězení řetězců k vytváření dotazů SQL, NIKDY!
Jste otevřeni pro sql injekci, neexistuje pro to žádná omluva. Místo toho použijte parametry 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)
Nyní ukončete tuto metodu se smysluplnou zprávou, pokud uživatel nezadal platná data. Můžete zkontrolovat validFromDate
a validToDate
které jsou booleovské. Zbytek kódu se provede 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
Právě jsem viděl, že používáte varchar
k uložení datetimes
. Proč? Opravte to v databázi.