Avatar of sgaggerj
sgaggerjFlag for United States of America asked on

VB.NET (MySQL) Saving changes to a datatable to the db

Hi Experts,

i'm using MySQL and VB.Net 2008

I created a dataset with the wizard

in my code i'm doing the following (see code)

What i'm confused about is that it is NOT updating this information to the database.

what am i missing or doing wrong?

the Update returns 0
Inventory_DataTable = New PEQ.inventoryDataTable
Inventory_TableAdapter = New PEQTableAdapters.inventoryTableAdapter
Inventory_TableAdapter.ClearBeforeFill = True
Inventory_TableAdapter.Connection = New MySql.Data.MySqlClient.MySqlConnection(PEQ_CON_STR)

Inventory_TableAdapter.FillByID(Inventory_DataTable, 3)

' now delete the item in slotid 13
Inventory_DataTable.RemoveinventoryRow(Inventory_DataTable.Select("slotid=13")(0))
Inventory_DataTable.AcceptChanges()

' now add a new item in slotid 13
Inventory_DataTable.AddinventoryRow(3, 13, 1868, 1, 4278190080, 0, 0, 0, 0, 0, 0)
Inventory_DataTable.AcceptChanges()
Inventory_TableAdapter.Update(Inventory_DataTable)



' My customization of the fill command
Option Strict Off
Option Explicit On

Imports System
Imports MySql.Data.MySqlClient

Namespace PEQTableAdapters
    Partial Public Class inventoryTableAdapter
        Inherits System.ComponentModel.Component
        Public Property SelectCommand() As MySqlCommand()

            Get
                If (Me._commandCollection Is Nothing) Then
                    Me.InitCommandCollection()
                End If
                Return Me._commandCollection
            End Get

            Set(ByVal value As MySqlCommand())
                Me._commandCollection = value
            End Set

        End Property
        Public Function FillByID(ByVal dataTable As PEQ.inventoryDataTable, ByVal ID As Integer) As Integer
            Dim stSelect As String

            stSelect = Me._commandCollection(0).CommandText
            Try
                Me._commandCollection(0).CommandText += " WHERE charid=" + ID.ToString
                Return Me.Fill(dataTable)
            Catch ex As Exception

            Finally
                Me._commandCollection(0).CommandText = stSelect
            End Try

        End Function
    End Class
End Namespace

Open in new window

Visual Basic.NETMySQL Server

Avatar of undefined
Last Comment
sgaggerj

8/22/2022 - Mon
ASKER CERTIFIED SOLUTION
AngryBinary

Log in or sign up to see answer
Become an EE member today7-DAY FREE TRIAL
Members can start a 7-Day Free trial then enjoy unlimited access to the platform
Sign up - Free for 7 days
or
Learn why we charge membership fees
We get it - no one likes a content blocker. Take one extra minute and find out why we block content.
See how we're fighting big data
Not exactly the question you had in mind?
Sign up for an EE membership and get your own personalized solution. With an EE membership, you can ask unlimited troubleshooting, research, or opinion questions.
ask a question
ASKER
sgaggerj

The reason that i used the AcceptChanges was when i first tried it it gave me a duplicate key error, as there are two primary keys in the table.  The primary keys are the 1st two fields in the row (in the example above '3' and '13')

commenting them out did in fact give me the same error.

it appears that the update IS populated too.
ASKER
sgaggerj

i just tried updating the actual row data, rather than deleting and adding a new row, and it DOES update the database (Result of the update = 1)

ASKER
sgaggerj

it appears that the deleting is not working, i tried to delete that single row, and it did delete it from my table, but upon update it did not remove the row from the database.
Experts Exchange has (a) saved my job multiple times, (b) saved me hours, days, and even weeks of work, and often (c) makes me look like a superhero! This place is MAGIC!
Walt Forbes
ASKER
sgaggerj

I think i figured it out.

the 'RemoveinventoryRow' only removes it from the datatable, it doesn't delete it.

i needed to use 'Delete' on the row

Inventory_DataTable.Select("slotid=13")(0).Delete

then it worked.
ASKER
sgaggerj

Got me looking in the right direction, Thanks!!