Я думаю, вам просто нужно ввести условие ~ WHERE ID = tbStudentID2.Text
Private Sub tbStudentID2_TextChanged(sender As Object, e As EventArgs) Handles tbStudentID2.TextChanged
Dim id As Integer
If Integer.TryParse(tbStudentID2.Text, id) Then
mySql = $"SELECT DateDiff('d', [DateofRank], [currentDate]) FROM StudentData WHERE id={id}"
ConnDB()
myCommand = New OleDbCommand(mySql, myConnection)
myCommand.ExecuteNonQuery()
myRead = myCommand.ExecuteReader()
Do While myRead.Read()
tbDays.Text = myRead(0).ToString()
Loop
End If
End Sub
Полагаю, ваш идентификатор - целое число. Если это так, то это сработает и будет защищено от инъекций SQL. Я подтвердил ваш вклад. Хотите узнать, когда произошла опечатка? Кроме того, вы действительно хотите запросить при вводе 12345, ID = 1, ID = 12, ID = 123, ID = 1234 и ID = 12345? Возможно, он не введен - тогда все в порядке.
Возможно, вам потребуется изменить условие на соответствующее имя поля, например [StudentData].[ID]
?
Кроме того, это всегда приведет к последний матч в таблице. Если вы не ожидаете более одного матча, тогда вы можете просто взять первый. Вы можете устранить Do While
l oop.
Я вижу некоторые другие проблемы, такие как одноразовые предметы, не подлежащие утилизации. Вы не должны держать соединение с базой данных открытым, когда вы его не используете. Объекты, которые должны быть утилизированы немедленно, по порядку: myRead
, myCommand
и myConnection
. Это легко сделать, объявив их с ключевым словом Using
в порядке, обратном моему списку. ConnDB()
может вернуть ваше соединение в этом случае.