【问题标题】:Search Filtering Mysql / Gridview in VB.Net在 VB.Net 中搜索过滤 Mysql / Gridview
【发布时间】:2015-02-27 13:03:18
【问题描述】:

我有 2 个文本框“TextBox1”和“TextBox2”以及一个名为“Button1”的提交按钮 下面我有一个标签“Label1”

我需要做的是在 "Input1 & Input2" (yyyy-mm-dd) 中的日期之间搜索 并显示一个值(它只是计算表格中的记录)

这是我当前的查询

Dim c As New MySqlConnection("Server=localhost;Database=test;UID=test;PWD=test;")
c.Open()
Dim com As New MySqlCommand("SELECT COUNT(*) as c FROM toutcome WHERE AffID = '0001' AND CompletedDate >= CURDATE();", c)
Dim myReader As MySqlDataReader = com.ExecuteReader(CommandBehavior.CloseConnection)
myReader.Read()
Label1.Text = myReader.Item(0).ToString()

myReader.Close()

这是我试图用来完成上述任务的查询,它根本不起作用。

Dim c As New MySqlConnection("Server=localhost;Database=mdxmain;UID=MerryWoodTest;PWD=H0r$hamTest;")
c.Open()
Dim com As New MySqlCommand("SELECT COUNT(*) as c FROM toutcome WHERE AffID = '0001' AND WHERE CompletedDate >= '" & TextBox1.Text & "' AND CompletedDate <= '" & TextBox2.Text & "'", c)
Dim myReader As MySqlDataReader = com.ExecuteReader(CommandBehavior.CloseConnection)
myReader.Read()
Label11.Text = myReader.Item(0).ToString()

myReader.Close()

顶部查询有效,我得到一个值。

底部查询错误是

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法使用 在第 1 行的 'WHERE CompletedDate >= '' AND CompletedDate

【问题讨论】:

  • 根本不工作想解释一下吗?你收到错误信息了吗?计数为零?
  • 我已经更新了史蒂夫的问题。

标签: mysql asp.net vb.net datepicker


【解决方案1】:

该行中的 WHERE 太多

... FROM toutcome WHERE AffID = '0001' AND WHERE ....
                                           ^^^^^

当然更好的方法是使用参数化查询使命令文本更具可读性并防止 Sql Injection 并在一次性对象周围添加 Using 语句以在您完成使用它们时释放它们的资源

Dim commandText= "SELECT COUNT(*) as c FROM toutcome " & _
                 "WHERE AffID = '0001' AND CompletedDate >= @init " & _
                 " AND CompletedDate <= @ending"
Using c = New MySqlConnection(".........")
Using com = new MySqlCommand(commandText, c)
    c.Open()
    com.Parameters.Add("@init", MySqlDbType.Date).Value = Convert.ToDateTime(TextBox1.Text)
    com.Parameters.Add("@ending", MySqlDbType.Date).Value = Convert.ToDateTime(TextBox2.Text)
    Using myReader = com.ExecuteReader(CommandBehavior.CloseConnection)
       if myReader.Read() Then
           Label11.Text = myReader.Item(0).ToString()
       End If
    End Using
End Using
End Using

【讨论】:

    【解决方案2】:

    我还修复了我之前的错误查询,它正在工作。

       Dim x1 As New MySqlConnection("Server=test;Database=mdxmain;UID=test;PWD=testt;")
                x1.Open()
                Dim comx1 As New MySqlCommand("SELECT COUNT(*) as c FROM toutcome WHERE AffID = '" & CType(Session.Item("affID"), String) & "' AND CompletedDate >= '" & TextBox1.Text & "' AND CompletedDate <= '" & TextBox22.Text & "' AND Status = 'A'", x1)
                Dim myReaderx1 As MySqlDataReader = comx1.ExecuteReader(CommandBehavior.CloseConnection)
                myReaderx1.Read()
                Label12.Text = myReaderx1.Item(0).ToString()
    
                myReaderx1.Close()
    

    【讨论】:

    • 我认为您确实在这里至少犯了几个错误。不使用,字符串连接。你读过这个Sql Injection Explained
    猜你喜欢
    • 2016-06-23
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多