【发布时间】: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