Visual Basic MySQL Datagrid Удалить из базы данных - PullRequest
0 голосов
/ 09 марта 2012

Я делаю систему счетов в Visual Basic 2010, и я застрял здесь

Вот мой код

     Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As  System.EventArgs) Handles btnDelete.Click

    For Each row As DataGridViewRow In datagrid.SelectedRows
        Dim selectedindex As String = datagrid.CurrentRow.Cells(0).Value.ToString()
        datagrid.Rows.Remove(row)
        If conn.State = ConnectionState.Closed Then
            conn.Open()
        End If
        Dim sql = "DELETE FROM sales WHERE InvoiceNo='" & txtInvoiceNo.Text & "' and id='" & selectedindex & "'"
        Dim cmd As New MySqlCommand(sql, conn)
        Dim reader As MySqlDataReader = cmd.ExecuteReader

        If reader.Read() Then

        End If
        conn.Close()
        reader.Close()
    Next

End Sub

Этот код не работает должным образом, пожалуйста, посмотрите мой счетснимок экрана и предложите мне лучший код

Когда я пытаюсь удалить выбранную строку, код не работает, и если кто-то может сказать мне, что я могу удалить несколько выбранных строк?они удаляются из таблицы данных, но не из базы данных

Sales Form

1 Ответ

1 голос
/ 09 марта 2012

Попробуйте это:

Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As  System.EventArgs) Handles btnDelete.Click

    Using cn As New MySqlConnection("Connection string here"), _
          cmd As New MySqlCommand("DELETE sales WHERE InvoiceNo= ?InvoiceNo and id= ?id", cn)

        cmd.Parameters.Add("?InvoiceNo", MySqlDbTypes.VarChar, 10).Value = txtInvoiceNo.Text
        cmd.Parameters.Add("?id", MySqlDbTypes.Int32)

        cn.Open()
        For Each row As DataGridViewRow In datagrid.SelectedRows
            cmd.Parameters(1).Value = row.Cells(0).Value
            cmd.ExecuteNonQuery()
            datagrid.Rows.Remove(row)
        Next row

    End Using

End Sub

Похоже, вы пытаетесь сохранить и повторно использовать один объект подключения и просто открыть его при необходимости. Это ошибочно: это нарушает способность .Net создавать пулы соединений. Вы действительно хотите создать новый объект подключения для каждого места, где вы будете общаться с базой данных. Это также позволит вам лучше работать, обеспечивая правильное закрытие соединения после неверного запроса. Наконец, использование параметров запроса защитит ваше приложение от атак SQL-инъекций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...