#vb.net #sql-server-2008
#vb.net #sql-server-2008
Вопрос:
что не так с моим кодом?
Dim x As Integer
Dim sql As String
ModConnectDb.OpenDatabase()
conn.Open()
For x = 200 To 208
sql = "select * from ttransaction where no_room= 'x' and status= 'checkin '"
cmd = New SqlCommand(sql, conn)
dtReader = cmd.ExecuteReader
If dtReader.HasRows = False Then
cbo_numberroom.Items.Add(x)
End If
dtReader.Close()
Next
Я делаю заявку для больницы. VIP room имеет номера комнат с 200 по 208
цель этого кода. если выбран переключатель, который является VIP, он проверит, есть ли номер 200 уже в базе данных и соответствует ли статус регистрации номера. если да, то число 200 больше не появится в выпадающем списке.
но результаты этого кода. хотя 200 было заполнено, все еще отображается в выпадающем списке для выбора номера комнаты, я действительно надеюсь, что это поможет
Спасибо перед
Ответ №1:
- Вы не используете параметризованные запросы
- После ‘checkin’ есть пробел, которого может не быть в базе данных, поэтому совпадения нет
- Вы не используете номер комнаты в качестве параметра SQL-запроса
- Самое главное: вы не говорите нам, в чем ошибка!
Я вижу, что вы пишете no_room='x'
. Это проверяет, есть ли символ ‘x’ в столбце no_room
вашей базы данных.
Если вы хотите проверить, есть ли номер с номером x
уже в базе данных, вам следует использовать
cmd = New SqlCommand("SELECT * FROM tTransaction WHERE no_room = @roomNumber AND status = 'checkin'", conn)
cmd.Parameters.AddWithValue("@roomNumber", x)
...
Комментарии:
1. ошибки нет. но результаты этого кода. хотя 200 были заполнены, они все еще отображаются в выпадающем списке для выбора номера комнаты. можете ли вы привести мне пример для № 3, пожалуйста?
2. @roomNumber это имя поля в базе данных или произвольное именование?
3. Я пробовал. тем не менее, результаты. кстати, я поместил их в событие CheckedChanged
4. извините за мою ошибку. влюбленный код уже запущен. большое спасибо, друг