【问题标题】:VB.NET how to pass value on database in functionVB.NET如何在函数中传递数据库的值
【发布时间】:2019-09-04 22:58:10
【问题描述】:

抱歉这个菜鸟问题。 我只想知道正确的语法是什么? 我只想返回声明的真假。

我有这个功能

Private Sub InsertTest(ByVal StudentID As Integer, ByVal SubjectID As Integer)
    Dim dr As MySqlDataReader
    Dim cmd As New MySqlCommand
    Dim myconn As MySqlConnection = New MySqlConnection("Data Source=localhost;Database=csais;User ID=root;Password=;")
    myconn.Open()

    Dim Query = "Select student_id,sub_id FROM student_subject WHERE student_id = @student_id AND sub_id = @sub_id"
    cmd = New MySqlCommand(Query, myconn)
    dr = cmd.ExecuteReader
    If dr.Read = True Then
        MessageBox.Show("This statement is true")
    Else
        MessageBox.Show("This statement is false")
    End If

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    InsertTest(2009500083, 1)
End Sub

如果我将 @student_id 替换为 2009500083 并将 @sub_id 替换为 1 它会返回真。如果不 我有一个错误 博士 = cmd.ExecuteReader

在命令执行过程中遇到致命错误。

在函数中传递值的正确语法是什么?谢谢。

【问题讨论】:

  • 问题是您在SQL代码中使用了参数占位符,即@student_id@sub_id,但您从未将相应的参数添加到您的命令对象中。听起来您的解决方案不是最佳选择。正确的解决方法是添加适当的参数。有很多地方可以让您了解如何在 ADO.NET 代码中使用参数。
  • 顺便说一句,您也永远不会关闭连接对象或数据读取器,这很糟糕。理想情况下,您将使用Using 语句来创建连接对象和数据读取器。在这种情况下,它们都将在块的末尾隐式关闭。
  • 您发布的代码无论如何都没有任何意义,所以我希望这只是一个测试。您只检索您在WHERE 子句中指定的列,因此您只会得到与您输入的相同的值。在实际场景中没有用处。在名为InsertTest 的方法中只有SELECT 似乎也很奇怪。同样,大概只是为了测试,但仍然不必要地混淆。

标签: database vb.net visual-studio function


【解决方案1】:

您在 select 语句中使用了参数,因此您需要将它们添加到命令的参数集合中。当然你需要 Using...End Using 块。

Private Sub InsertTest(ByVal StudentID As Integer, ByVal SubjectID As Integer)
    Dim RetVal As Integer
    Using myconn As MySqlConnection = New MySqlConnection("Data Source=localhost;Database=csais;User ID=root;Password=;")
        Dim Query = "Select Count(*) FROM student_subject WHERE student_id = @student_id AND sub_id = @sub_id"
        Using cmd As New MySqlCommand(Query, myconn)
            cmd.Parameters.Add("@student_id", MySqlDbType.Int32).Value = StudentID
            cmd.Parameters.Add("@sub_id", MySqlDbType.Int32).Value = SubjectID
            myconn.Open()
            RetVal = CInt(cmd.ExecuteScalar)
        End Using
    End Using
    If RetVal = 1 Then
        MessageBox.Show("This statement is true")
    Else
        MessageBox.Show("This statement is false")
    End If
End Sub

【讨论】:

    【解决方案2】:

    我知道这是旧的,但如果有人像我一样想知道的话。这就是答案

    Private Sub InsertTest(ByVal StudentID As Integer, ByVal SubjectID As Integer)
        Dim dr As MySqlDataReader
        Dim cmd As New MySqlCommand
        Dim myconn As MySqlConnection = New MySqlConnection("Data Source=localhost;Database=csais;User ID=root;Password=;")
        myconn.Open()
    
        Dim Query = "Select student_id,sub_id FROM student_subject WHERE student_id = @student_id AND sub_id = @sub_id"
        cmd = New MySqlCommand(Query, myconn)
        
        '====================================================
        ' this is where he missed it, you need to add your parameter
        ' you forgot to pass the parameters
    
        cmd.Parameters.AddWithValue("@student_id ", StudentID)
        cmd.Parameters.AddWithValue("@sub_id", SubjectID)
    
        '====================================================
       
        dr = cmd.ExecuteReader
        If dr.Read = True Then
            MessageBox.Show("This statement is true")
        Else
            MessageBox.Show("This statement is false")
        End If
    
    End Sub
    
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        InsertTest(2009500083, 1)
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-02
      • 2019-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-17
      相关资源
      最近更新 更多