Try
conn = New SqlConnection(strcon)
conn.Open()
Dim str As String = "select * from MYTABLE where Year >='#" & Txtfromyear_reprt.Text & "#' and Year <='#" & Txttoyear_reprt.Text & "#'"
da = New SqlDataAdapter(str, conn)
Dim ds As New DataSet
da.Fill(ds, "MYTABLE")
DgvReport.DataSource = ds.Tables("MYTABLE")
da.Dispose()
conn.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
我正在处理我的学校项目,但我遇到了一个无法解决的问题。我在搜索按钮中编写了此代码,但是当我在运行时单击它时,我的数据网格中没有显示任何数据。
我想要的是当我点击它时我想使用两个文本框将所有数据从mytable显示到Datagrid视图。我有两个文本框txtfromyear
和txttoyear
以及数据库列Year
,其数据类型为nvarchar(50)
。
请帮帮我,谢谢你。
答案 0 :(得分:6)
不要使用字符串连接来构建您的SQL查询,从不!
你是开放的SQL注入,没有任何借口。而是使用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)
现在,如果用户没有提供有效日期,请使用有意义的消息退出此方法。您可以查看布尔值validFromDate
和validToDate
。其余代码执行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
我刚看到您使用varchar
来存储datetimes
。为什么?将其修复到数据库中。