VB Win Form Issue Использование SqlCommand - PullRequest
0 голосов
/ 17 марта 2020

В настоящее время я создаю инструмент на основе форм win в Visual Studio 2019, который считывает данные из базы данных SQL. У меня возникают трудности при извлечении поля из формы, в которой я работаю, в запрос sqlCommand.

Это часть моего VB-скрипта. Обратите внимание, что это прекрасно работает без фильтра, похожего на фамилию, и также работает, если я пишу его с жестко закодированной фамилией, такой как «Адамс». Я также могу заставить тот же лог c работать с использованием переменных непосредственно в SQL. Во всплывающем сообщении отображается сообщение «Адамс», как и ожидалось, но в сетке данных ничего не возвращается.

Снимки экрана, приведенные ниже, показывают результат запуска формы по желанию и при жестком кодировании в «Адамс».

Заранее благодарим за любую помощь:)

Public Class Form4
Public Sub BtnFetchAdastraUser_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFetchAdastraUser.Click

    Dim connetionString As String = "Data Source=xxxxxx;Initial Catalog=xxxxxx;User ID=xxxxx;Password=xxxxx"
    Dim dt As New DataTable()

    Using connection As New SqlConnection(connetionString)
        Dim command As New SqlCommand(
                                        "select 
                                            [u].[UserRef],
                                            [u].[UserName],
                                            [u].[FullName]
                                        from dbo.[Users][u]
                                        where
                                            [Obsolete] = 0
                                                and [Surname] like '%" + Surname.Text + "%'", connection
                                      )
        command.Connection.Open()
        Dim sqlAdaptr As New SqlDataAdapter(command)
        Dim ds As New DataTable
        sqlAdaptr.Fill(ds)
        DataGridView1.DataSource = ds

        MsgBox(Surname.Text)

        command.Connection.Close()
    End Using
End Sub

End Class

enter image description here

enter image description here

Ответы [ 2 ]

0 голосов
/ 18 марта 2020

Рекомендуется использовать параметры для написания SQL операторов запроса. Его можно изменить следующим образом:

    Using connection As New SqlConnection(connetionString)
        connection.Open()
        Dim command As New SqlCommand(
                                        "select 
                                        [u].[UserRef],
                                        [u].[UserName],
                                        [u].[FullName]
                                    from dbo.[Users][u]
                                    where
                                        [Obsolete] = 0
                                            and [Surname] like @Surname", connection
                                      )
        command.Parameters.Clear()
        command.Parameters.AddWithValue("@Surname", "%" & Surname.Text & "%")

        Dim sqlAdaptr As New SqlDataAdapter(command)
        Dim ds As New DataTable
        sqlAdaptr.Fill(ds)
        DataGridView1.DataSource = ds

        MsgBox(Surname.Text)
        MsgBox(command.CommandText)

        command.Connection.Close()
    End Using
0 голосов
/ 17 марта 2020

Я понял это. Я запустил command.CommandText через мой MsgBox, и он выдвинул на первый план проблему с тем, через что я проходил в запросе!

Я добавил текст в начало поля, через которое проходил.

enter image description here

...