Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database VB.NET如何在函数中向数据库传递值_Database_Vb.net_Visual Studio_Function - Fatal编程技术网

Database VB.NET如何在函数中向数据库传递值

Database VB.NET如何在函数中向数据库传递值,database,vb.net,visual-studio,function,Database,Vb.net,Visual Studio,Function,很抱歉这个问题。 我只是想知道这个的正确语法是什么? 我只想返回这个陈述,如果它是真的或假的 我有这个功能 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

很抱歉这个问题。 我只是想知道这个的正确语法是什么? 我只想返回这个陈述,如果它是真的或假的

我有这个功能

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 它会变成现实。如果不是 我犯了一个错误 dr=cmd.ExecuteReader

在命令执行期间遇到致命错误


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

您正在select语句中使用参数,因此需要将它们添加到命令的参数集合中。当然,您需要使用…结束使用块

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

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