2017-09-25 21 views
0
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 

我正在使用我的学校项目,但遇到了无法解决的问题。我在我的搜索按钮中编写了这段代码,但是当我在运行时单击它时,我的数据网格中没有显示任何数据。使用文本框从特定范围的SQL Server数据库中进行选择

我想要的是当我单击它时我想使用两个文本框将所有数据从mytable显示到Datagrid视图。我有两个文本框,txtfromyeartxttoyear以及数据库列Year,数据类型为nvarchar(50)

请帮助我,谢谢你提前。

+0

您确定您的表格中有这些年份值之间的数据吗? – GuidoG

+0

我不知道VB,所以你能告诉我'#'字符需要什么? – GuidoG

+0

您使用的是webforms吗?如果该查询是正确的(我也想知道那些#),那么在设置DataSource之后,您只需要一个DgvReport.DataBind()。 –

回答

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) 

现在,如果用户没有提供有效日期,请使用有意义的消息退出此方法。您可以检查是布尔值的validFromDatevalidToDate。代码的其余部分执行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。为什么?修复它在数据库中。

相关问题