Обновление базы данных с использованием datagridview vb.net - PullRequest
0 голосов
/ 07 марта 2019

я новичок в vb.net.Я использую Visual Studio 2017 и SQL Server 2008. У меня есть представление данных, которое было заполнено из базы данных с использованием комбинированного списка в качестве фильтра.Теперь я хочу обновить свою базу данных, добавив или удалив данные в mydatagridview с помощью кнопки с именем edit. Пожалуйста, помогите мне: '(

***** здесь код, который я использовал для заполнения моего datagridviw

Private Sub ComboBox3_SelectedvalueChanged(sender As Object, e As EventArgs) Handles ComboBox3.SelectedValueChanged
    'filling datagridview using cmbbx 3'
    Cn.Open()
    rq = "select * from [cutting software].dbo.vehicule"
    rq1 = "select * from [cutting software].dbo.tissu"
    rq2 = "select* from [cutting software].dbo.projet"
    rq3 = "select * from [cutting software].dbo.kit_cover"
    rq4 = "select * from [cutting software].dbo.[Plan de coupe]"
    cmd = New SqlCommand(rq, Cn)
    da = New SqlDataAdapter(cmd)
    Dim cmd1 As New SqlCommand(rq1, Cn)
    da1 = New SqlDataAdapter(cmd1)
    Dim cmd2 As New SqlCommand(rq2, Cn)
    da2 = New SqlDataAdapter(cmd2)
    Dim cmd3 As New SqlCommand(rq3, Cn)
    da3 = New SqlDataAdapter(cmd3)
    Dim cmd4 As New SqlCommand(rq4, Cn)
    da4 = New SqlDataAdapter(cmd4)
    Cn.Close()
    If ComboBox3.SelectedItem = "vehicule" Then
        ds = New DataSet
        dt = New DataTable
        da.Fill(dt)
        da.Fill(ds, "vehicule")
        DataGridView1.DataSource = dt
        dt = ds.Tables("vehicule")
    ElseIf ComboBox3.SelectedItem = "tissu" Then
        dt1 = New DataTable
        da1.Fill(dt1)
        DataGridView1.DataSource = dt1
        dt1 = ds.Tables("tissu")
    ElseIf ComboBox3.SelectedItem = "projet" Then
        dt2 = New DataTable
        da2.Fill(dt2)
        DataGridView1.DataSource = dt2
        dt2 = ds.Tables("projet")
    ElseIf ComboBox3.SelectedItem = "kit_cover" Then
        dt3 = New DataTable
        da3.Fill(dt3)
        DataGridView1.DataSource = dt3
        dt3 = ds.Tables("kit_cover")
    ElseIf ComboBox3.SelectedItem = "plan coupe" Then
        dt4 = New DataTable
        da4.Fill(dt4)
        DataGridView1.DataSource = dt4
        dt4 = ds.Tables("Plan de coupe")
    End If
End Sub
Private Sub edit_Click(sender As Object, e As EventArgs) Handles edit.Click
    Cn.Open()
    cmdb = New SqlCommandBuilder(da)
    da.Update(ds, "vehicule")
    Cn.Close()
End Sub

**** здесь код, который я использовал для обновления базы данных

Private Sub edit_Click(sender As Object, e As EventArgs) Handles edit.Click
    If ComboBox3.SelectedItem = "vehicule" Then
        Cn.Open()
        cmdb = New SqlCommandBuilder(da)
        da.Update(ds, "vehicule")
        Cn.Close()
    ElseIf ComboBox3.SelectedItem = "tissu" Then
        Cn.Open()
        cmdb = New SqlCommandBuilder(da1)
        da1.Update(ds, "tissu")
        Cn.Close()
    ElseIf ComboBox3.SelectedItem = "projet" Then
        Cn.Open()
        cmdb = New SqlCommandBuilder(da2)
        da2.Update(ds, "projet")
        Cn.Close()
    ElseIf ComboBox3.SelectedItem = "kit_cover" Then
        Cn.Open()
        cmdb = New SqlCommandBuilder(da3)
        da3.Update(ds, "kit_cover")
        Cn.Close()
    ElseIf ComboBox3.SelectedItem = "plan coupe" Then
        Cn.Open()
        cmdb = New SqlCommandBuilder(da4)
        da4.Update(ds, "plan de coupe")
        Cn.Close()
    End If
End Sub

первый код работает правильно, но у меня проблема во втором, когда я запускаю второй код, который он показываетмне это сообщение System.InvalidOperationException: 'При обновлении не удалось найти TableMapping [' vehicleule '] или DataTable' vehicleule '.'

Ответы [ 2 ]

0 голосов
/ 08 марта 2019

Это будет делать то, что вы хотите.

Imports System.Data.SqlClient
Public Class Form1
    Dim sCommand As SqlCommand
    Dim sAdapter As SqlDataAdapter
    Dim sBuilder As SqlCommandBuilder
    Dim sDs As DataSet
    Dim sTable As DataTable

    Private Sub load_btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles load_btn.Click
        Dim connectionString As String = "Data Source=.;Initial Catalog=pubs;Integrated Security=True"
        Dim sql As String = "SELECT * FROM Stores"
        Dim connection As New SqlConnection(connectionString)
        connection.Open()
        sCommand = New SqlCommand(sql, connection)
        sAdapter = New SqlDataAdapter(sCommand)
        sBuilder = New SqlCommandBuilder(sAdapter)
        sDs = New DataSet()
        sAdapter.Fill(sDs, "Stores")
        sTable = sDs.Tables("Stores")
        connection.Close()
        DataGridView1.DataSource = sDs.Tables("Stores")
        DataGridView1.ReadOnly = True
        save_btn.Enabled = False
        DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect

    End Sub

    Private Sub new_btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles new_btn.Click
        DataGridView1.[ReadOnly] = False
        save_btn.Enabled = True
        new_btn.Enabled = False
        delete_btn.Enabled = False
    End Sub

    Private Sub delete_btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles delete_btn.Click
        If MessageBox.Show("Do you want to delete this row ?", "Delete", MessageBoxButtons.YesNo) = DialogResult.Yes Then
            DataGridView1.Rows.RemoveAt(DataGridView1.SelectedRows(0).Index)
            sAdapter.Update(sTable)
        End If
    End Sub

    Private Sub save_btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles save_btn.Click
        sAdapter.Update(sTable)
        DataGridView1.[ReadOnly] = True
        save_btn.Enabled = False
        new_btn.Enabled = True
        delete_btn.Enabled = True
    End Sub
End Class

http://vb.net -informations.com / DataGridView / vb.net_datagridview_database.htm

0 голосов
/ 08 марта 2019

У тебя слишком много всего происходит. Будь проще. Вы привязываетесь к одной таблице. Вам просто нужен один оператор select с выбранным именем таблицы, добавленным в конце. Единый DataAdapter и DataTable. DataTable может обновить базу данных, не проходя танец ComboBox снова.

Использование блоков гарантирует, что ваше Соединение не только закрыто, но и удалено.

Private dt As DataTable
Private da As SqlDataAdapter
'**EDIT** move declare of rq to class level
Private rq As String

Private Sub ComboBox3_SelectedvalueChanged(sender As Object, e As EventArgs) Handles ComboBox3.SelectedValueChanged
    '**EDIT** moved declaration to Class level
    rq = "select * from [cutting software].dbo." & ComboBox3.SelectedItem.ToString
    dt = New DataTable
    Using cn As New SqlConnection("Your connection string")
        da = New SqlDataAdapter(rq, cn)
        da.Fill(dt) 'If the connection is closed, the DataAdapter will open and close it for you
    End Using
    DataGridView1.DataSource = dt
End Sub

Private Sub edit_Click(sender As Object, e As EventArgs) Handles edit.Click
    Dim cmdb As New SqlCommandBuilder(da)
    Using cn As New SqlConnection("Your connection string")
        '**EDIT** Add line to re-establish connection for adapter
        da.SelectCommand = New SqlCommand(rq, cn)
        da.Update(dt)
    End Using
End Sub

РЕДАКТИРОВАТЬ Восстановить соединение для адаптера данных.

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