【问题标题】:Select from SQL Server database with specific range using textbox使用文本框从具有特定范围的 SQL Server 数据库中选择
【发布时间】:2017-09-25 15:06:34
【问题描述】:
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)

请帮帮我,提前谢谢你。

【问题讨论】:

  • 你确定你的表中有这些年份值之间的数据吗?
  • 我不懂 VB,你能告诉我 '#' 字符是干什么用的吗?
  • 您在使用网络表单吗?如果该查询是正确的(我也想知道那些 #),那么在设置 DataSource 之后您只需要一个 DgvReport.DataBind()。
  • @GuidoG 是的,我应该使用 % 而不是 #?因为两者都不起作用
  • 到底为什么要使用 varchar 来存储年份或日期?这是你的第一个问题,先解决它

标签: vb.net sql-server-2012


【解决方案1】:

永远不要使用字符串连接来构建你的 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。为什么?在数据库中修复它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    • 1970-01-01
    • 2012-09-29
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    相关资源
    最近更新 更多