mysql - VB NET + 子字符串 + Mysql + 检查行

标签 mysql vb.net substring

我有一个简单的表单,带有一个按钮和 2 个文本框。

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    MysqlConn = New MySqlConnection(ConfigurationManager.ConnectionStrings("db.My.MySettings.dbConnectionString").ToString)

    Try
        'MysqlConn.Dispose()
        'MysqlConn.Close()
        MysqlConn.Open()
        Dim str As String
        str = "SELECT substring_index(substring(path,1,locate(substring_index(path,'\\',-1),path)-2),'\\',-1)as PATH FROM foto where id_product = '" & TextBox2.Text & "'"
        Dim dbCommand As New MySqlCommand(str, MysqlConn)
        Dim dbReader = dbCommand.ExecuteReader
        While dbReader.Read()
            If IsDBNull(dbReader(0)) OrElse String.IsNullOrEmpty(dbReader.GetString(0)) Then
                TextBox1.Text = "0"
            Else
                TextBox1.Text = dbReader.Item("PATH")
            End If
        End While
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    Finally
        MysqlConn.Dispose()
    End Try
End Sub

当我输入textbox2“1”时,我得到了我想要的值。 但是当我输入“2”时,这个 id_product 不存在,我没有“0”。 它是空白的,Textbox1 具有我以前的值。

我做错了什么?

最佳答案

如果查询没有返回任何记录,则您的代码不会进入 while 循环(dbReader.Read 返回 false),因此您不会将文本框设置为“0”,但您也应该开始使用参数化查询。避免可能的解析错误非常重要,主要是避免 Sql Injection attacks

因此,您可以测试您的查询是否生成了任何记录来验证 DataReader 的 HasRows 属性

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Using MysqlConn = New MySqlConnection(ConfigurationManager.ConnectionStrings("db.My.MySettings.dbConnectionString").ToString)

        Try
            MysqlConn.Open()
            Dim str As String
            str = "SELECT substring_index
                          (substring(path,1,
                          locate(substring_index(path,'\\',-1),path)-2),
                          '\\',-1) as PATH 
                   FROM foto where id_product = @pid"
            Dim dbCommand As New MySqlCommand(str, MysqlConn)
            dbCommand.Parameters.Add("@pid", MySqlDbType.VarChar).Value = textBox2.Text
            Using dbReader = dbCommand.ExecuteReader
               if dbReader.HasRows Then
                  While dbReader.Read()
                     If IsDBNull(dbReader(0)) OrElse String.IsNullOrEmpty(dbReader.GetString(0)) Then
                        TextBox1.Text = "0"
                     Else
                        TextBox1.Text = dbReader.Item("PATH")
                     End If
                  End While
               else
                 TextBox1.Text = "0"
               End If
           End Using
       Catch ex As Exception
             MessageBox.Show(ex.Message)
       End Try
    End Using
End Sub

关于mysql - VB NET + 子字符串 + Mysql + 检查行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43789966/

相关文章:

c# - 在 .Net 中阻塞一个线程

python - 提取开始标记和结束标记之间的所有字符串

ios - NSString 子串检测

mysql - mysql中datadir和innodb_data_home_dir有什么区别?

mysql - 在外键列上插入问题

vb.net - 如何将Visual Studio 2008上的sql数据库精简版与vb.net(智能设备)连接

mysql - 如何获取MySql数据库中所有列名显示在comboBox中

c# - vb 正确的函数转换为 c#

mysql - 如何在不丢失数据的情况下更改 MySQL 表?

mysql - Docker Node 应用程序无法连接链接的mysql容器