Member 14621280 Ответов: 1

Запись поиска VB.NET использование базы данных ms access?


привет,

я создал Module.vb в качестве каталога базы данных под именем ConnDB.vb и Private sub ConnD()


я хочу попробовать поисковую запись, которая отображается в Datagridview1 и фильтрует строки ... я пробовал, но это, кажется, ошибка....

Примечание :

1. я хочу найти код в текстовом поле txtsearch

Пожалуйста, предложить основные записи поиск инструкции SQL

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

Imports System.Data.OleDb


Public Class SongList
    Dim cmd As OleDbCommand
    Dim dr As OleDbDataReader
    Dim sql As String
    Dim dataFile As String
    Dim ds As New DataSet
    Dim con As New OleDbConnection
    Dim da As New OleDb.OleDbDataAdapter

    Private Sub Button16_Click(sender As Object, e As EventArgs) Handles Button16.Click
        Song_Entry.Show()
        Close()

    End Sub

    Public Sub Load()
        ConnD()
        Sql = "select * from SONGS"
        cmd = New OleDbCommand(sql, conn)
        dr = cmd.ExecuteReader()
        DataGridView1.Rows.Clear()

        Do While dr.Read = True
            DataGridView1.Rows.Add(dr(0), dr(1), dr(2), dr(3), dr(4))

        Loop

        conn.Close()

    End Sub



    Private Sub SongList_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Load()
        Me.KeyPreview = True
    End Sub

    Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click
        Close()

    End Sub

    Private Sub btnUpdate_Click(sender As Object, e As EventArgs) Handles btnUpdate.Click
        Dim CODE, ETITLE, TTITLE, SONGT As String

        CODE = txtCode.Text
        ETITLE = txtET.Text
        TTITLE = txtTT.Text
        SONGT = RichTextBox1.Text


        Try
            sql = "update SONGS set ETITLE = ?,TTITLE = ?,SONGT = ? where CODE = ? "
            ConnD()
            cmd = New OleDbCommand(sql, conn)
            cmd.Parameters.AddWithValue("ETITLE", ETITLE)
            cmd.Parameters.AddWithValue("TTITLE", TTITLE)
            cmd.Parameters.AddWithValue("SONGT", SONGT)
            cmd.Parameters.AddWithValue("CODE", CODE)

            cmd.ExecuteNonQuery()
            Console.WriteLine(Command)
            MessageBox.Show("Updated")


            conn.Close()
            txtCode.Enabled = False
            txtET.Enabled = False
            txtTT.Enabled = False
            RichTextBox1.Enabled = False
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    Private Sub DataGridView1_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellClick

        ConnD()
        sql = "select * from SONGS where CODE = ?"
        cmd = New OleDbCommand(sql, conn)
        cmd.Parameters.AddWithValue("CODE", DataGridView1.CurrentRow.Cells(0).Value.ToString())

        dr = cmd.ExecuteReader()

        If (dr.Read) Then
            txtCode.Text = dr(0).ToString
            txtET.Text = dr(1).ToString
            txtTT.Text = dr(2).ToString
            RichTextBox1.Text = dr(3).ToString

        End If


        conn.Close()




    End Sub

    Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click
        Dim CODE As String

        CODE = txtCode.Text

        Try
            sql = "delete from SONGS where CODE = ? "
            ConnD()
            cmd = New OleDbCommand(sql, conn)
            
            cmd.Parameters.AddWithValue("CODE", CODE)

            cmd.ExecuteNonQuery()
            Console.WriteLine(Command)
            MessageBox.Show("Deleted")

            Load()

            conn.Close()

        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    Private Sub txtsearch_TextChanged(sender As Object, e As EventArgs) Handles txtsearch.TextChanged
       
    End Sub

    Private Sub DataGridView1_CellContentDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellContentDoubleClick
        Dim form As New SongShow
        
        form.RichTextBox1.Text = DataGridView1.CurrentRow.Cells(3).Value.ToString()
        form.RichTextBox2.Text = DataGridView1.CurrentRow.Cells(3).Value.ToString()
        form.RichTextBox3.Text = DataGridView1.CurrentRow.Cells(4).Value.ToString()
        form.ShowDialog()
    End Sub

    Private Sub SongList_KeyDown(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown
        If e.KeyCode = Keys.Escape Then

            txtEsearch.Clear()
            txtsearch.Clear()
            txtTsearch.Clear()
            txtsearch.Focus()

        End If
    End Sub

    Private Sub Button10_Click(sender As Object, e As EventArgs) Handles Button10.Click

    End Sub

    Private Sub TextBox5_TextChanged(sender As Object, e As EventArgs) Handles txtEsearch.TextChanged
        Dim selStart As Integer = txtEsearch.SelectionStart
        txtEsearch.Text = txtEsearch.Text.ToUpper()
        txtEsearch.SelectionStart = selStart
    End Sub

    Private Sub Button14_Click(sender As Object, e As EventArgs) Handles Button14.Click

        'for add
        txtCode.Enabled = True
        txtET.Enabled = True
        txtTT.Enabled = True
        RichTextBox1.Enabled = True
    End Sub

    Private Sub DataGridView1_KeyDown(sender As Object, e As KeyEventArgs) Handles DataGridView1.KeyDown
        If e.KeyCode = Keys.Enter Then

            Dim form As New SongShow

            form.RichTextBox1.Text = DataGridView1.CurrentRow.Cells(3).Value.ToString()
            form.RichTextBox2.Text = DataGridView1.CurrentRow.Cells(3).Value.ToString()
            form.RichTextBox3.Text = DataGridView1.CurrentRow.Cells(4).Value.ToString()
            form.ShowDialog()
        End If
    End Sub
End Class

Richard Deeming

Если вы хотите, чтобы мы помогли вам исправить ошибку, вы должны сказать нам, что это за ошибка и откуда она возникла.

Нажмите на зеленую ссылку "улучшить вопрос" и обновите свой вопрос. Добавьте полную информацию об исключении и укажите, из какой строки кода оно исходит.

Member 14621280

Private Sub txtsearch_TextChanged(sender As Object, e As EventArgs) обрабатывает txtsearch.Очередь textchanged

Конд()

Dim sql = "SELECT * from SONGS WHERE "
Если Не Струна.IsNullOrWhiteSpace(txtsearch.Текст) Затем
sql = sql & "код типа @CODE или "
cmd.параметры.AddWithValue ("@CODE", txtsearch.Текст)
Конец, Если
Коннектикут.Закрывать()


Конец Подводной Лодки

Richard Deeming

А ошибка есть???

Member 14621280

не показывал никаких ошибок и ничего фильтрующего

Richard Deeming

Ну, основываясь на вырезанном коде, который вы разместили в своем комментарии - который не является частью кода, который вы разместили в своем вопросе! - в этом нет ничего удивительного.

Вы звоните ConnD Вы создаете строку с SQL-запросом и добавляете параметр в свой файл. OleDbCommand Затем вы закрываете соединение и возвращаетесь.

В этом методе нет ничего для выполнения SQL-запроса, поэтому неудивительно, что SQL-запрос не выполняется.

Member 14621280

но я понятия не имею, как разместить sql-оператор для поиска записей

Member 14621280

я пробовал и это

Конд()

Попробуй
sql = "select * from SONGS where CODE = '" & txtsearch.Текст & "'"
cmd = New OleDbCommand(sql, conn)

dr = cmd.Метода executereader()

Поймать ex как исключение
Ящик для сообщений.Показать(напр.сообщение)
Конец Попытки
Коннектикут.Закрывать()

И ошибка будет = "несоответствие типа данных в выражении критериев"

Richard Deeming

Нет, ошибка будет заключаться в следующем: ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.

Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]


Не говоря уже о том, что после выполнения запроса вы выбрасываете результаты, ничего с ними не делая.

1 Ответов

Рейтинг:
0

Wendelius

Несколько предложений:

Вместо того чтобы использовать считыватель в методе Load для заполнения сетки, получите данные в таблицу данных и используйте ее в качестве источника данных. Видеть DbDataAdapter.Метод Заполнения (System.Data.Всего) | Майкрософт Документы[^] и Практическое руководство.Свойство DataSource (Системы.Окна.Формы) | Microsoft Docs[^]

В btnUpdate_Click попробуйте использовать в запросе именованные параметры, соответствующие именам параметров, которые вы используете при добавлении значения. Иначе говоря

sql = "update SONGS set ETITLE = @ETITLE, TTITLE = @TTITLE, SONGT = @SONGT where CODE = @CODE"

Всегда помните о том, чтобы использовать Использование Инструкции - Visual Basic | Microsoft Docs[^] для правильного размещения объектов базы данных

Для практических примеров я предлагаю пройти через Правильное выполнение операций с базой данных[^] . Логика точно такая же для объектов OleDb


Member 14621280

Нет обновления auctually это все хорошо, только поиск записи, имеющие проблемы

Wendelius

Я понимаю это, но, пожалуйста, прочтите все предложения.


Maciej Los

5ed!