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
,这似乎也很奇怪。同样,可能只是为了测试,但仍然存在不必要的混乱。