Как создать синтаксис sql для передачи данных и одновременного удаления данных - PullRequest
0 голосов
/ 19 апреля 2020

Как мне перенести данные из таблицы1 в таблицу2 и удалить эти данные из таблицы1

вот мой код:

 Public Class Payment
Dim con As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\VetSystemDatabase.accdb") 'Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Serafin\Documents\VetSystemDatabase.accdb
Dim sql As String
Dim sqldel As String
Dim cmd As New OleDb.OleDbCommand
Dim i As Integer

Dim da As New OleDb.OleDbDataAdapter

Private Property dt As DataTable
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Try
        con.Open()
        sql = "INSERT INTO [tbl_RegisteredRecords] SELECT * FROM [Register] WHERE [Price]=" & Val(PricePay.Text) & ";"
        cmd.Connection = con
        cmd.CommandText = sql

        sqldel = "Delete * from Register WHERE ID=" & Val(Me.Text) & ";"
        cmd.Connection = con
        cmd.CommandText = sqldel



        i = cmd.ExecuteNonQuery
        If i > 0 Then
            MsgBox("Costumer has  Paid!")


        Else
            MsgBox("NO ONE PAID!")
        End If

    Catch ex As Exception
        MsgBox(ex.Message)
    Finally
        con.Close()
        loadrecord()
    End Try
End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    loadrecord()
    Search.Clear()
End Sub
Sub loadrecord()
    Try
        Dim sql As String
        Dim cmd As New OleDb.OleDbCommand
        Dim dt As New DataTable
        Dim da As New OleDb.OleDbDataAdapter
        con.Open()
        sql = "Select * from Register"
        cmd.Connection = con
        cmd.CommandText = sql
        da.SelectCommand = cmd

        da.Fill(dt)

        DataGridView1.DataSource = dt
    Catch ex As Exception
        MsgBox(ex.Message)
    Finally
        con.Close()

    End Try
End Sub

Private Sub DataGridView1_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
    Me.Text = DataGridView1.CurrentRow.Cells(0).Value.ToString()
    PricePay.Text = DataGridView1.CurrentRow.Cells(16).Value.ToString()
End Sub

Private Sub TextBox2_TextChanged(sender As Object, e As EventArgs) Handles Search.TextChanged
    sql = "Select * from Register where CellphoneNo like '%" & Search.Text & "%' or PetName LIKE '%" & Search.Text & "%' or TelephoneNO LIKE '%" & Search.Text & "%'"

    dt = New DataTable
    Try
        'open the connection
        con.Open()
        'bind the SQL and the connection through OleDBDataAdaoter and stored to da
        da = New OleDb.OleDbDataAdapter(sql, con)
        'and whatever the value of da will be fill into dt our imaginary data table
        da.Fill(dt)
        'get the datasource of datagridview from our data table
        DataGridView1.DataSource = dt

    Catch ex As Exception
        'will throw an error if something went wrong.
        MsgBox(ex.Message, MsgBoxStyle.Information)
    End Try
    'close connection
    con.Close()
End Sub

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    Me.Hide()
    DashboardAdmin.Show()

End Sub

Конечный класс

Укажите код потому что я тупой, и мой учитель дал нам неожиданный срок, и я в отчаянии, пожалуйста, помогите мне. СПАСИБО!

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

1 Ответ

0 голосов
/ 20 апреля 2020

Это шаблон для большей части кода базы данных в ADO. net.

Сначала необходимо убедиться, что введенные пользователем данные верны. Для чисел вы можете использовать .TryParse, который возвращает True или False. Если True, он присвоит преобразованное значение второму параметру.

Сохраните ваши Соединения и Команды в том методе, в котором они используются, чтобы вы могли быть уверены, что они закрыты и утилизированы. Блок Using...End Using сделает это за вас, даже если есть ошибка. Запятая в конце первой строки Using означает, что мы включаем следующую строку в блок, в данном случае, Команду.

Всегда использовать параметры. Это будет поможет вам избежать Sql инъекций и упростит написание текста команды. Мы используем значение, которое было установлено в .TryParse, paid, вместо того, чтобы снова преобразовывать PricePay.Text.

Не открывайте соединение, пока непосредственно перед .Execute. Связи являются ценным ресурсом. Он закрыт и расположен по адресу End Using.

. Это может не решить вашу проблему. Смотрите мои вопросы в комментариях.

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim paid As Decimal
    If Not Decimal.TryParse(PricePay.Text, paid) Then
        MessageBox.Show("Please put a valid number in Price Paid.")
        Exit Sub
    End If

    Try
        Using con As New OleDbConnection("Your connection string"),
                cmd As New OleDbCommand("INSERT INTO [tbl_RegisteredRecords] SELECT * FROM [Register] WHERE [Price]= ?", con)
            cmd.Parameters.Add("@PricePaid", OleDbType.Decimal).Value = paid
            con.Open()
            Dim i = cmd.ExecuteNonQuery
            If i > 0 Then
                cmd.CommandText = "Delete * from Register WHERE ID = ?"
                cmd.ExecuteNonQuery()
            End If
        End Using
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
    loadrecord()
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...