Я уже давно занимаюсь поиском в Google, но я просто не уверен, «как» задать вопрос, чтобы Google знал, что я имею в виду. У меня есть приложение, которое я разрабатываю в визуальной студии. Прямо сейчас это просто базовая форма окна с текстовым полем поиска для ввода пользователем данных и кнопки поиска для поиска в базе данных sql и возврата строки, которая соответствует. Конечный пользователь ищет ученика на основе введенного номера ученика. Я заполнил sql db двумя фиктивными учениками, чтобы иметь данные для тестирования. Когда я ввожу первый номер ученика и нажимаю поиск, он работает нормально. Когда я ввожу второе число, снова работает отлично. Когда я нажимаю поиск без данных в поле, отлично работает и бросает мне свое собственное сообщение об ошибке. Когда я ввожу недопустимый номер, который не находится в базе данных, ничего не происходит. Он по-прежнему показывает предыдущую запись, которую я только что получил, и очищает текстовое поле и помещает курсор обратно в поле и дает ему фокус (как следует), но не говорит мне, что он не может найти этот конкретный номер в db. Я не могу понять, как и где в моем коде исправить это.Поиск SQL через Windows Form
Справочная информация: Я преподаю на языках программирования (сегменты youtube, бесплатные онлайн-игры «how to's», google, многочисленные книги, прочитанные и т. Д.), И понять основные основы синтаксиса и т. Д., Но не там, где я хочу быть. Я ЛЮБЛЮ разработку программного обеспечения как хобби и любви, узнавая, как это сделать. Любая помощь чрезвычайно ценится. Просто будьте осторожны. :-)
Я удалил конфиденциальную информацию по назначению и заменил их на «?». Вот мой текущий код:
Private Sub SearchButton_Click(sender As System.Object, e As System.EventArgs) Handles SearchButton.Click
If stunumtxtbox.Text = "" Then
MsgBox("Please enter a student number.", MsgBoxStyle.Exclamation)
stunumtxtbox.Select()
Else
Try
con.ConnectionString = "Data Source=?\?;Initial Catalog=?;Persist Security Info=True;User ID=?;Password=?"
con.Open()
Catch se As SqlException
MsgBox(se.Message)
Finally
Try
Dim dt As New DataTable
Dim ds As New DataSet
Dim da As New SqlDataAdapter
ds.Tables.Add(dt)
da = New SqlDataAdapter("SELECT DISTINCT * FROM Student_Info WHERE studentId = '" & stunumtxtbox.Text & "'", con)
da.Fill(dt)
For Each DataRow In dt.Rows
If stunumtxtbox.Text = dt.Rows(0)("studentId").ToString Then
fnametxtbox.Text = dt.Rows(0)("firstName").ToString
mnametxtbox.Text = dt.Rows(0)("midleInitial").ToString
lnametxtbox.Text = dt.Rows(0)("lastName").ToString
addresstxtbox.Text = dt.Rows(0)("addressStreet").ToString
address2txtbox.Text = dt.Rows(0)("addressOption").ToString
citytxtbox.Text = dt.Rows(0)("addressCity").ToString
statetxtbox.Text = dt.Rows(0)("addressState").ToString
ziptxtbox.Text = dt.Rows(0)("addressZip").ToString
countrytxtbox.Text = dt.Rows(0)("addressCountry").ToString
celltxtbox.Text = dt.Rows(0)("contactcellphone").ToString
studentidtxtbox.Text = dt.Rows(0)("studentId").ToString
Else
End If
Next
con.Close()
Catch se As SqlException
MsgBox(se.Message)
Finally
stunumtxtbox.Clear()
stunumtxtbox.Select()
Try
StudentNameTextBox.Text = lnametxtbox.Text + "," + " " + fnametxtbox.Text + " " + mnametxtbox.Text
Catch ex As Exception
MsgBox(ex.Message)
Finally
fnamelabel.Visible = True
mnamelabel.Visible = True
lnamelabel.Visible = True
addressstreetlabel.Visible = True
address2label.Visible = True
addresscitylabel.Visible = True
addressstatelabel.Visible = True
addressziplabel.Visible = True
addresscountrylabel.Visible = True
celllabel.Visible = True
studentidlabel.Visible = True
editbutton.Enabled = True
editbutton.Visible = True
End Try
End Try
End Try
End If
End Sub
Я не уверен, что следую вашему первому предложению: «Если у вашего datatable нет строк, у вас нет совпадений». Моя база данных всегда будет иметь строки, так как в ней всегда будут ученики. Я ищу конкретную строку, которая имеет определенное значение, введенное конечным пользователем, и если эта строка не существует, сообщите мне, чтобы я мог выбросить ошибку «не найден» пользователю. Имеет ли это смысл? Я пытаюсь объяснить все, что могу. –
Если ваш запрос db для ученика по id, почему у вас будет больше одной записи?Также смотрите «Параметризированные запросы», чтобы избежать «SQL injection». – OneFineDay
Не будет больше одной записи на student_id. это было бы огромной проблемой lol Спасибо за ваши отзывы ... Я все еще сравниваю и перевариваю ваши рекомендации. –