Member 14597659 Ответов: 1

Не удается получить данные из SQL server


Это мое начало. У меня есть SQL server на моей локальной машине. Я пытаюсь отобразить данные в виде сетки с помощью visual basic. Я попробовал коды, посмотрев онлайн-уроки с YouTube.
Я написал следующие коды, но они где-то застряли.

Что я уже пробовал:

Imports System.Data.SqlClient

Public Class Form1

    Dim connection As New SqlConnection("Data Source=DESKTOP-4FDNPTL\SQLEXPRESS;Initial Catalog=POS;Integrated Security=True")

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'TODO: This line of code loads data into the 'POSDataSet1.OUTDOOR' table. You can move, or remove it, as needed.
        Me.OUTDOORTableAdapter.Fill(Me.POSDataSet1.OUTDOOR)

        FilterData("")

    End Sub

    Public Sub FilterData(ByVal valueToSerach As String)

        'SELECT * FROM DBO.OUTDOOR WHERE ITEM = 'HP209';'

        Dim searchquery As String = "SELECT * FROM DBO.OUTDOOR WHERE ITEM = 'HP209'" & valueToSerach & "%"

        Dim command As New SqlCommand(searchquery, connection)
        Dim adapter As New SqlDataAdapter(command)
        Dim table As New DataTable()

        adapter.Fill(table)

        DataGridView1.DataSource = table

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    End Sub

    Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick

    End Sub
End Class

1 Ответов

Рейтинг:
0

MadMyche

Я бы посоветовал вам найти несколько других учебных пособий, так как код, который вы представили, созрел для SQL-инъекция атака; которая была выявлена более 20 лет назад - еще до того, как YouTube вообще существовал.
Поищите на этом сайте и в других местах, чтобы узнать все, что вам нужно знать, а затем немного SQL-инъекции; это видно здесь еженедельно, и если Вы читаете другие ответы, то есть множество ссылок на информацию об этом.

В этой строке кода есть несколько проблем:

Dim searchquery As String = "SELECT * FROM DBO.OUTDOOR WHERE ITEM = 'HP209'" & valueToSerach & "%"
1. он уязвим, поскольку вы принимаете ввод пользователя дословно и объединяете его в SQL-оператор. Обработанный ввод данных от конечного пользователя может обмануть ваше программное обеспечение, раскрыв все его секреты, добавив содержимое во все ваши таблицы или удалив всю вашу базу данных. Одновременно.

2. The WHERE предложение в операторе использует равенство (=) оператор, но, похоже, вы хотите сделать поиск, который потребовал бы LIKE оператор.

3. синтаксис инструкции SQL должен вызывать возникновение исключения - вы просматривали журналы или запускали это в Отлаживать режим?
Теперь о лучшем способе сделать это.
Dim searchquery As String = "SELECT * FROM dbo.Outdoor WHERE Item LIKE 'HP209' + @ValueToSearch + '%'"
Dim command As New SqlCommand(searchquery, connection)
cmd.Parameters.AddWithValue("@ValueToSearch", valueToSerach)
1. заменил прямой пользовательский ввод на Параметр, и добавил новую строку после команда создать присвоить значение параметру. Если был введен какой-либо гнусный ввод, то при добавлении параметра в оператор он будет закодирован, чтобы не обмануть ваш сервер.

2. предложение WHERE было изменено на использование оператора LIKE, чтобы мы могли извлекать строки, соответствующие шаблону HP209xxxx (HP209, HP209abc, HP209xxaafff) все-таки вернулись
Разве ты не знаешь, но сегодня ... Новости CodeProject[^] есть статья, и пункт № 6 в этом списке - это SQL-инъекция-я бы предложил прочитать эту статью и связанные с ней пункты, такие как #3 (Проверка ввода).
Выявлено: 25 самых опасных типов программных ошибок – mem corruption, so hot right now • The Register[^]