使用文本框

时间:2017-09-25 15:06:34

标签: vb.net sql-server-2012

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视图。我有两个文本框txtfromyeartxttoyear以及数据库列Year,其数据类型为nvarchar(50)

请帮帮我,谢谢你。

1 个答案:

答案 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)

现在,如果用户没有提供有效日期,请使用有意义的消息退出此方法。您可以查看布尔值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。为什么?将其修复到数据库中。