Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
CODE PROJECT For Those Who Code
  • Home
  • Articles
  • FAQ
Community
  1. Home
  2. General Programming
  3. Visual Basic
  4. vb.net 2008 Express to SQL - Dataset does not show changes in DB

vb.net 2008 Express to SQL - Dataset does not show changes in DB

Scheduled Pinned Locked Moved Visual Basic
databasecsharptutorialannouncement
13 Posts 3 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • G Offline
    G Offline
    gengel
    wrote on last edited by
    #1

    Good day, I have tried various methods to update an SQL database, but every time the database is updated but not the dataset. I have done it with addrow and accept changes and with execute no query, but the dataset does not register the changes made. I have to MAIN.data.DS.Tables.Remove("Orders") and then add the datatable back to the dataset with the data adapter: Example 1:

    Function Add_Orders_Row() As Boolean
    Try
    Dim RowISAdded As Boolean = False
    If txtQuantity.Text <> "" And txtProductionNo.Text <> "" _
    And txtWeek.Text <> "" And txtPart.Text <> "" _
    And cboProductCode.Text <> "" And txtPart.Text <> "" _
    And txtWorksOrderNo.Text <> "" Then
    Dim dt As DataTable = MAIN.data.DS.Tables("Orders")
    Dim dr As DataRow = dt.NewRow
    dr.Item("OrderStatus") = cboOrderStatus.Text
    dr.Item("SamsungRef") = "NA"
    dr.Item("ProductCode") = cboProductCode.Text
    dr.Item("ProductSerialNo") = txtProductSerialNo.Text
    dr.Item("ProductionNo") = txtProductionNo.Text
    dr.Item("WeekNo") = txtWeek.Text
    dr.Item("PartNo") = CType(txtPart.Text, Integer)
    dr.Item("OrderDate") = dtpOrderDate.Text
    dr.Item("QuantityOrder") = CType(txtQuantity.Text, Integer)
    dr.Item("QuantityScanned") = 0
    dr.Item("WorksOrderNo") = txtWorksOrderNo.Text
    If txtFirstSerial.Text = "" Then
    dr.Item("FirstSerialNo") = "<SCAN>"
    dr.Item("LastSerialNo") = "<CALC>"
    Else
    dr.Item("FirstSerialNo") = txtFirstSerial.Text
    dr.Item("LastSerialNo") = txtLastSerial.Text
    End If

                dr.Item("timenow") = Date.Now
                dt.Rows.Add(dr)
                'Update new row to database
                Dim qry As String = "SELECT \* FROM Orders"
                If MAIN.data.Conn.State = ConnectionState.Closed Then MAIN.data.Conn.Open()
                Dim da1 As New SqlClient.SqlDataAdapter
                da1.SelectCommand = New SqlClient.SqlCommand(qry, MAIN.data.Conn)
                Dim cb1 As SqlClient.SqlCommandBuilder = New System.Data.SqlClient.SqlCommandBuilder(da1)
                da1.Update(MAIN.data.
    
    D W 3 Replies Last reply
    0
    • G gengel

      Good day, I have tried various methods to update an SQL database, but every time the database is updated but not the dataset. I have done it with addrow and accept changes and with execute no query, but the dataset does not register the changes made. I have to MAIN.data.DS.Tables.Remove("Orders") and then add the datatable back to the dataset with the data adapter: Example 1:

      Function Add_Orders_Row() As Boolean
      Try
      Dim RowISAdded As Boolean = False
      If txtQuantity.Text <> "" And txtProductionNo.Text <> "" _
      And txtWeek.Text <> "" And txtPart.Text <> "" _
      And cboProductCode.Text <> "" And txtPart.Text <> "" _
      And txtWorksOrderNo.Text <> "" Then
      Dim dt As DataTable = MAIN.data.DS.Tables("Orders")
      Dim dr As DataRow = dt.NewRow
      dr.Item("OrderStatus") = cboOrderStatus.Text
      dr.Item("SamsungRef") = "NA"
      dr.Item("ProductCode") = cboProductCode.Text
      dr.Item("ProductSerialNo") = txtProductSerialNo.Text
      dr.Item("ProductionNo") = txtProductionNo.Text
      dr.Item("WeekNo") = txtWeek.Text
      dr.Item("PartNo") = CType(txtPart.Text, Integer)
      dr.Item("OrderDate") = dtpOrderDate.Text
      dr.Item("QuantityOrder") = CType(txtQuantity.Text, Integer)
      dr.Item("QuantityScanned") = 0
      dr.Item("WorksOrderNo") = txtWorksOrderNo.Text
      If txtFirstSerial.Text = "" Then
      dr.Item("FirstSerialNo") = "<SCAN>"
      dr.Item("LastSerialNo") = "<CALC>"
      Else
      dr.Item("FirstSerialNo") = txtFirstSerial.Text
      dr.Item("LastSerialNo") = txtLastSerial.Text
      End If

                  dr.Item("timenow") = Date.Now
                  dt.Rows.Add(dr)
                  'Update new row to database
                  Dim qry As String = "SELECT \* FROM Orders"
                  If MAIN.data.Conn.State = ConnectionState.Closed Then MAIN.data.Conn.Open()
                  Dim da1 As New SqlClient.SqlDataAdapter
                  da1.SelectCommand = New SqlClient.SqlCommand(qry, MAIN.data.Conn)
                  Dim cb1 As SqlClient.SqlCommandBuilder = New System.Data.SqlClient.SqlCommandBuilder(da1)
                  da1.Update(MAIN.data.
      
      D Offline
      D Offline
      Dave Kreskowiak
      wrote on last edited by
      #2

      Read up on what AcceptChanges does first. By calling that, you're telling the dataset that all changes that need to be written out the database HAVE been written out to the database, even if you didn't call Update first.

      A guide to posting questions on CodeProject[^]
      Dave Kreskowiak Microsoft MVP Visual Developer - Visual Basic
           2006, 2007, 2008
      But no longer in 2009...

      G 1 Reply Last reply
      0
      • D Dave Kreskowiak

        Read up on what AcceptChanges does first. By calling that, you're telling the dataset that all changes that need to be written out the database HAVE been written out to the database, even if you didn't call Update first.

        A guide to posting questions on CodeProject[^]
        Dave Kreskowiak Microsoft MVP Visual Developer - Visual Basic
             2006, 2007, 2008
        But no longer in 2009...

        G Offline
        G Offline
        gengel
        wrote on last edited by
        #3

        Hi, Thanks for your reply. I only added the accept changes later when I noticed that the ADO.net dataset-datatable is not updating. The SQL database contains the new data that was added, but the change is not reflected back to the Dataset-datatable. This is what I am doing now to update the data set

        Function Load_Table(ByVal SQLString As String, ByVal TableName As String) As Boolean

            Dim SQLstr As String
            Dim tableISadded As Boolean = False
            Try
                'open connection
                If SQLcon.State = ConnectionState.Closed Then
                    SQLcon.Open()
                End If
                SQLstr = SQLString
                Dim cmd As SqlCommand = New SqlCommand(SQLstr, SQLcon)
                Dim da As New SqlDataAdapter(SQLstr, SQLcon)
                da.Fill(pDS, TableName)
                da.FillSchema(pDS, SchemaType.Mapped)
                For Each dt As DataTable In pDS.Tables
                    If dt.TableName = TableName Then
                        tableISadded = True
                    Else
                        tableISadded = False
                    End If
                Next
                Return tableISadded
            Catch ex As Exception
                MessageBox.Show(ex.Message)
                Return False
            Finally
                'close connection
                SQLcon.Close()
            End Try
        
        End Function
        
                   'Remove the orders table
                    MAIN.data.DS.Tables.Remove("Orders")
                    ''Reload datatable to dataset. 
                    MAIN.data.Load\_Table("SELECT \* FROM Orders", "Orders")
        
        D W 2 Replies Last reply
        0
        • G gengel

          Hi, Thanks for your reply. I only added the accept changes later when I noticed that the ADO.net dataset-datatable is not updating. The SQL database contains the new data that was added, but the change is not reflected back to the Dataset-datatable. This is what I am doing now to update the data set

          Function Load_Table(ByVal SQLString As String, ByVal TableName As String) As Boolean

              Dim SQLstr As String
              Dim tableISadded As Boolean = False
              Try
                  'open connection
                  If SQLcon.State = ConnectionState.Closed Then
                      SQLcon.Open()
                  End If
                  SQLstr = SQLString
                  Dim cmd As SqlCommand = New SqlCommand(SQLstr, SQLcon)
                  Dim da As New SqlDataAdapter(SQLstr, SQLcon)
                  da.Fill(pDS, TableName)
                  da.FillSchema(pDS, SchemaType.Mapped)
                  For Each dt As DataTable In pDS.Tables
                      If dt.TableName = TableName Then
                          tableISadded = True
                      Else
                          tableISadded = False
                      End If
                  Next
                  Return tableISadded
              Catch ex As Exception
                  MessageBox.Show(ex.Message)
                  Return False
              Finally
                  'close connection
                  SQLcon.Close()
              End Try
          
          End Function
          
                     'Remove the orders table
                      MAIN.data.DS.Tables.Remove("Orders")
                      ''Reload datatable to dataset. 
                      MAIN.data.Load\_Table("SELECT \* FROM Orders", "Orders")
          
          D Offline
          D Offline
          Dave Kreskowiak
          wrote on last edited by
          #4

          You're not saying what pDS is. You're also not showing what happens to pDS before Load_Table gets called.

          A guide to posting questions on CodeProject[^]
          Dave Kreskowiak Microsoft MVP Visual Developer - Visual Basic
               2006, 2007, 2008
          But no longer in 2009...

          G 1 Reply Last reply
          0
          • D Dave Kreskowiak

            You're not saying what pDS is. You're also not showing what happens to pDS before Load_Table gets called.

            A guide to posting questions on CodeProject[^]
            Dave Kreskowiak Microsoft MVP Visual Developer - Visual Basic
                 2006, 2007, 2008
            But no longer in 2009...

            G Offline
            G Offline
            gengel
            wrote on last edited by
            #5

            Hi, Hope this helps. Datalayer class

            Dim pDS As New DataSet

            Public Property DS() As DataSet
                Get
                    Return pDS
                End Get
                Set(ByVal value As DataSet)
                    pDS = value
                End Set
            End Property
            

            Sub MakeConnect()
            SQLcon.ConnectionString = "Data Source=192.168.10.24\BDMS;" & _
            "Initial Catalog=FLATPAN;" & _
            "User ID=flatpan;" & _
            "Password=*******"
            Try
            SQLcon.Open()
            Catch ex As Exception
            MessageBox.Show(ex.Message)
            End Try

            End Sub
            

            Function Load_Table(ByVal SQLString As String, ByVal TableName As String) As Boolean

                Dim SQLstr As String
                Dim tableISadded As Boolean = False
                Try
                    'open connection
                    If SQLcon.State = ConnectionState.Closed Then
                        SQLcon.Open()
                    End If
                    SQLstr = SQLString
                    Dim cmd As SqlCommand = New SqlCommand(SQLstr, SQLcon)
                    Dim da As New SqlDataAdapter(SQLstr, SQLcon)
                    da.Fill(pDS, TableName)
                    da.FillSchema(pDS, SchemaType.Mapped)
                    For Each dt As DataTable In pDS.Tables
                        If dt.TableName = TableName Then
                            tableISadded = True
                        Else
                            tableISadded = False
                        End If
                    Next
                    Return tableISadded
                Catch ex As Exception
                    MessageBox.Show(ex.Message)
                    Return False
                Finally
                    'close connection
                    SQLcon.Close()
                End Try
            

            On the orders form call the Load_Table function to add the table to the dataset. This works.

            Private Sub Orders_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            'Load the orders table and lu products table
            MAIN.data.Load_Table("SELECT * FROM Orders", "Orders") 'THIS IS THE DA FILL FOR ORDERS
            MAIN.data.Load_Table("SELECT * FROM LU_Products", "LU_Products")
            MAIN.data.Load_Table("SELECT * FROM Status_Orders", "Status_Orders")
            Calculate_Total_Rows(0, "LOAD") 'SOME FORM ACTIONS
            Fields_Load(rowCounter) 'NOT PART OF UPDATE ONLY TO VIEW DATA
            Fields_State("LOCK") 'LOCK FIELDS SO USER CANT CHANGE
            End Sub

            Here add a new row to the ORDERS table. This works, but cannot see th

            D 1 Reply Last reply
            0
            • G gengel

              Hi, Hope this helps. Datalayer class

              Dim pDS As New DataSet

              Public Property DS() As DataSet
                  Get
                      Return pDS
                  End Get
                  Set(ByVal value As DataSet)
                      pDS = value
                  End Set
              End Property
              

              Sub MakeConnect()
              SQLcon.ConnectionString = "Data Source=192.168.10.24\BDMS;" & _
              "Initial Catalog=FLATPAN;" & _
              "User ID=flatpan;" & _
              "Password=*******"
              Try
              SQLcon.Open()
              Catch ex As Exception
              MessageBox.Show(ex.Message)
              End Try

              End Sub
              

              Function Load_Table(ByVal SQLString As String, ByVal TableName As String) As Boolean

                  Dim SQLstr As String
                  Dim tableISadded As Boolean = False
                  Try
                      'open connection
                      If SQLcon.State = ConnectionState.Closed Then
                          SQLcon.Open()
                      End If
                      SQLstr = SQLString
                      Dim cmd As SqlCommand = New SqlCommand(SQLstr, SQLcon)
                      Dim da As New SqlDataAdapter(SQLstr, SQLcon)
                      da.Fill(pDS, TableName)
                      da.FillSchema(pDS, SchemaType.Mapped)
                      For Each dt As DataTable In pDS.Tables
                          If dt.TableName = TableName Then
                              tableISadded = True
                          Else
                              tableISadded = False
                          End If
                      Next
                      Return tableISadded
                  Catch ex As Exception
                      MessageBox.Show(ex.Message)
                      Return False
                  Finally
                      'close connection
                      SQLcon.Close()
                  End Try
              

              On the orders form call the Load_Table function to add the table to the dataset. This works.

              Private Sub Orders_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
              'Load the orders table and lu products table
              MAIN.data.Load_Table("SELECT * FROM Orders", "Orders") 'THIS IS THE DA FILL FOR ORDERS
              MAIN.data.Load_Table("SELECT * FROM LU_Products", "LU_Products")
              MAIN.data.Load_Table("SELECT * FROM Status_Orders", "Status_Orders")
              Calculate_Total_Rows(0, "LOAD") 'SOME FORM ACTIONS
              Fields_Load(rowCounter) 'NOT PART OF UPDATE ONLY TO VIEW DATA
              Fields_State("LOCK") 'LOCK FIELDS SO USER CANT CHANGE
              End Sub

              Here add a new row to the ORDERS table. This works, but cannot see th

              D Offline
              D Offline
              Dave Kreskowiak
              wrote on last edited by
              #6

              This is hard to follow. Why are you apparently keeping the entire database, or at least entire tables, in memory? This is a design that will offer a performance gain for a small amount of time. The machine will eventually start swapping your app out to disk, slowing performance down dramatically.

              A guide to posting questions on CodeProject[^]
              Dave Kreskowiak Microsoft MVP Visual Developer - Visual Basic
                   2006, 2007, 2008
              But no longer in 2009...

              1 Reply Last reply
              0
              • G gengel

                Good day, I have tried various methods to update an SQL database, but every time the database is updated but not the dataset. I have done it with addrow and accept changes and with execute no query, but the dataset does not register the changes made. I have to MAIN.data.DS.Tables.Remove("Orders") and then add the datatable back to the dataset with the data adapter: Example 1:

                Function Add_Orders_Row() As Boolean
                Try
                Dim RowISAdded As Boolean = False
                If txtQuantity.Text <> "" And txtProductionNo.Text <> "" _
                And txtWeek.Text <> "" And txtPart.Text <> "" _
                And cboProductCode.Text <> "" And txtPart.Text <> "" _
                And txtWorksOrderNo.Text <> "" Then
                Dim dt As DataTable = MAIN.data.DS.Tables("Orders")
                Dim dr As DataRow = dt.NewRow
                dr.Item("OrderStatus") = cboOrderStatus.Text
                dr.Item("SamsungRef") = "NA"
                dr.Item("ProductCode") = cboProductCode.Text
                dr.Item("ProductSerialNo") = txtProductSerialNo.Text
                dr.Item("ProductionNo") = txtProductionNo.Text
                dr.Item("WeekNo") = txtWeek.Text
                dr.Item("PartNo") = CType(txtPart.Text, Integer)
                dr.Item("OrderDate") = dtpOrderDate.Text
                dr.Item("QuantityOrder") = CType(txtQuantity.Text, Integer)
                dr.Item("QuantityScanned") = 0
                dr.Item("WorksOrderNo") = txtWorksOrderNo.Text
                If txtFirstSerial.Text = "" Then
                dr.Item("FirstSerialNo") = "<SCAN>"
                dr.Item("LastSerialNo") = "<CALC>"
                Else
                dr.Item("FirstSerialNo") = txtFirstSerial.Text
                dr.Item("LastSerialNo") = txtLastSerial.Text
                End If

                            dr.Item("timenow") = Date.Now
                            dt.Rows.Add(dr)
                            'Update new row to database
                            Dim qry As String = "SELECT \* FROM Orders"
                            If MAIN.data.Conn.State = ConnectionState.Closed Then MAIN.data.Conn.Open()
                            Dim da1 As New SqlClient.SqlDataAdapter
                            da1.SelectCommand = New SqlClient.SqlCommand(qry, MAIN.data.Conn)
                            Dim cb1 As SqlClient.SqlCommandBuilder = New System.Data.SqlClient.SqlCommandBuilder(da1)
                            da1.Update(MAIN.data.
                
                W Offline
                W Offline
                William Winner
                wrote on last edited by
                #7

                If you're using ADO.Net, I believe you have to set up the TableMapping before the Update will work. See: Table Mapping in ADO.Net[^]

                1 Reply Last reply
                0
                • G gengel

                  Good day, I have tried various methods to update an SQL database, but every time the database is updated but not the dataset. I have done it with addrow and accept changes and with execute no query, but the dataset does not register the changes made. I have to MAIN.data.DS.Tables.Remove("Orders") and then add the datatable back to the dataset with the data adapter: Example 1:

                  Function Add_Orders_Row() As Boolean
                  Try
                  Dim RowISAdded As Boolean = False
                  If txtQuantity.Text <> "" And txtProductionNo.Text <> "" _
                  And txtWeek.Text <> "" And txtPart.Text <> "" _
                  And cboProductCode.Text <> "" And txtPart.Text <> "" _
                  And txtWorksOrderNo.Text <> "" Then
                  Dim dt As DataTable = MAIN.data.DS.Tables("Orders")
                  Dim dr As DataRow = dt.NewRow
                  dr.Item("OrderStatus") = cboOrderStatus.Text
                  dr.Item("SamsungRef") = "NA"
                  dr.Item("ProductCode") = cboProductCode.Text
                  dr.Item("ProductSerialNo") = txtProductSerialNo.Text
                  dr.Item("ProductionNo") = txtProductionNo.Text
                  dr.Item("WeekNo") = txtWeek.Text
                  dr.Item("PartNo") = CType(txtPart.Text, Integer)
                  dr.Item("OrderDate") = dtpOrderDate.Text
                  dr.Item("QuantityOrder") = CType(txtQuantity.Text, Integer)
                  dr.Item("QuantityScanned") = 0
                  dr.Item("WorksOrderNo") = txtWorksOrderNo.Text
                  If txtFirstSerial.Text = "" Then
                  dr.Item("FirstSerialNo") = "<SCAN>"
                  dr.Item("LastSerialNo") = "<CALC>"
                  Else
                  dr.Item("FirstSerialNo") = txtFirstSerial.Text
                  dr.Item("LastSerialNo") = txtLastSerial.Text
                  End If

                              dr.Item("timenow") = Date.Now
                              dt.Rows.Add(dr)
                              'Update new row to database
                              Dim qry As String = "SELECT \* FROM Orders"
                              If MAIN.data.Conn.State = ConnectionState.Closed Then MAIN.data.Conn.Open()
                              Dim da1 As New SqlClient.SqlDataAdapter
                              da1.SelectCommand = New SqlClient.SqlCommand(qry, MAIN.data.Conn)
                              Dim cb1 As SqlClient.SqlCommandBuilder = New System.Data.SqlClient.SqlCommandBuilder(da1)
                              da1.Update(MAIN.data.
                  
                  W Offline
                  W Offline
                  William Winner
                  wrote on last edited by
                  #8

                  As far as the second example...I don't think this is affecting it, because it doesn't look like you use it again, but you misspelled UNITS in the Select Statement.

                  Dim da As New SqlClient.SqlDataAdapter
                  da.SelectCommand = New SqlClient.SqlCommand("SELECT * FROM UNTIS", MAIN.data.Conn)

                  G 1 Reply Last reply
                  0
                  • G gengel

                    Hi, Thanks for your reply. I only added the accept changes later when I noticed that the ADO.net dataset-datatable is not updating. The SQL database contains the new data that was added, but the change is not reflected back to the Dataset-datatable. This is what I am doing now to update the data set

                    Function Load_Table(ByVal SQLString As String, ByVal TableName As String) As Boolean

                        Dim SQLstr As String
                        Dim tableISadded As Boolean = False
                        Try
                            'open connection
                            If SQLcon.State = ConnectionState.Closed Then
                                SQLcon.Open()
                            End If
                            SQLstr = SQLString
                            Dim cmd As SqlCommand = New SqlCommand(SQLstr, SQLcon)
                            Dim da As New SqlDataAdapter(SQLstr, SQLcon)
                            da.Fill(pDS, TableName)
                            da.FillSchema(pDS, SchemaType.Mapped)
                            For Each dt As DataTable In pDS.Tables
                                If dt.TableName = TableName Then
                                    tableISadded = True
                                Else
                                    tableISadded = False
                                End If
                            Next
                            Return tableISadded
                        Catch ex As Exception
                            MessageBox.Show(ex.Message)
                            Return False
                        Finally
                            'close connection
                            SQLcon.Close()
                        End Try
                    
                    End Function
                    
                               'Remove the orders table
                                MAIN.data.DS.Tables.Remove("Orders")
                                ''Reload datatable to dataset. 
                                MAIN.data.Load\_Table("SELECT \* FROM Orders", "Orders")
                    
                    W Offline
                    W Offline
                    William Winner
                    wrote on last edited by
                    #9

                    Hmm...ok, my first reply may not be your problem. I may have misunderstood your problem. Let me see if I understand now. In the first example, I still believe it's because you haven't set up the TableMapping. Though, I have to say, your code is a little hard to read and I believe a little non-standard. As to the second example, TableMapping isn't your issue because you're running ExecuteNonQuery. That section of code should update the database, but it won't update your DataTable in memory. You have to understand the basics of ADO.Net. When the DataTable is created, it basically makes a copy of the database in memory. It is not linked at all to the underlying Database. That's why you have to run the Update. If the TableMapping is set up properly, then, when the Update is called, it tells the DataAdapter to find the matching Table in the matching DataSet and update the cells based on their RowState property. If the RowState indicated Insert, then the SQL Insert is called. If the RowState says Modify, then it runs the SQL Update. If it says Delete, then it runs the SQL Delete. But, there is no static link between your DataTable and the DataSet. When you run the SQL Insert, you also will have to refresh your DataTable, or insert the data into the DataTable as well.

                    1 Reply Last reply
                    0
                    • W William Winner

                      As far as the second example...I don't think this is affecting it, because it doesn't look like you use it again, but you misspelled UNITS in the Select Statement.

                      Dim da As New SqlClient.SqlDataAdapter
                      da.SelectCommand = New SqlClient.SqlCommand("SELECT * FROM UNTIS", MAIN.data.Conn)

                      G Offline
                      G Offline
                      gengel
                      wrote on last edited by
                      #10

                      Hi, I am a little confused now. the code that I am using is based on several references and websites. I thought that was the idea of ADO.net. Work with data offline. What is the corrct way of doing this. I have tried to simplify my code below.

                      Imports System
                      Imports System.Data
                      Imports System.Data.SqlClient

                      Public Class Example
                      Dim SQLcon As New SqlConnection
                      Dim pDS As New DataSet

                      Sub MakeConnect()
                          SQLcon.ConnectionString = "Data Source=192.168.10.24\\BDMS;" & \_
                                                          "Initial Catalog=FLATPAN;" & \_
                                                          "User ID=flatpan;" & \_
                                                          "Password=\*\*\*\*\*\*\*\*\*"
                          Try
                              SQLcon.Open()
                          Catch ex As Exception
                              MessageBox.Show(ex.Message)
                          End Try
                      
                      End Sub
                      
                      Sub Load\_Table()
                          Dim SQLstr As String = "SELECT \* FROM Orders"
                          Try
                              'open connection
                              If SQLcon.State = ConnectionState.Closed Then
                                  SQLcon.Open()
                              End If
                              Dim cmd As SqlCommand = New SqlCommand(SQLstr, SQLcon)
                              Dim da As New SqlDataAdapter(SQLstr, SQLcon)
                              da.Fill(pDS, "ORDERS")
                              
                              'Added this to see if it helped
                              da.FillSchema(pDS, SchemaType.Mapped)
                          Catch ex As Exception
                              MessageBox.Show(ex.Message)
                          Finally
                              'close connection
                              SQLcon.Close()
                          End Try
                      End Sub
                      
                      Sub Add\_New\_Record()
                          Try
                              Dim dt As DataTable = pDS.Tables("Orders")
                              Dim dr As DataRow = dt.NewRow
                              dr.Item("OrderStatus") = "A"
                              dr.Item("SamsungRef") = "B"
                              dr.Item("ProductCode") = "C"
                              dr.Item("ProductSerialNo") = "D"
                              dr.Item("ProductionNo") = "E"
                              dt.Rows.Add(dr)
                      
                              'Update new row to database
                              Dim qry As String = "SELECT \* FROM Orders"
                              If SQLcon.State = ConnectionState.Closed Then SQLcon.Open()
                              Dim da1 As New SqlClient.SqlDataAdapter
                              da1.SelectCommand = New SqlClient.SqlCommand(qry, MAIN.data.Conn)
                              Dim cb1 As SqlClient.SqlCommandBuilder = New System.Data.SqlClient.SqlCommandBuilder(da1)
                              da1.Update(pDS, "Orders")
                      
                              'Had to add this to register change in dataset
                              pDS.Tables.Remove("Orders")
                              'Reatach datatable to dataset. Refresh primary keys
                      
                      G W 2 Replies Last reply
                      0
                      • G gengel

                        Hi, I am a little confused now. the code that I am using is based on several references and websites. I thought that was the idea of ADO.net. Work with data offline. What is the corrct way of doing this. I have tried to simplify my code below.

                        Imports System
                        Imports System.Data
                        Imports System.Data.SqlClient

                        Public Class Example
                        Dim SQLcon As New SqlConnection
                        Dim pDS As New DataSet

                        Sub MakeConnect()
                            SQLcon.ConnectionString = "Data Source=192.168.10.24\\BDMS;" & \_
                                                            "Initial Catalog=FLATPAN;" & \_
                                                            "User ID=flatpan;" & \_
                                                            "Password=\*\*\*\*\*\*\*\*\*"
                            Try
                                SQLcon.Open()
                            Catch ex As Exception
                                MessageBox.Show(ex.Message)
                            End Try
                        
                        End Sub
                        
                        Sub Load\_Table()
                            Dim SQLstr As String = "SELECT \* FROM Orders"
                            Try
                                'open connection
                                If SQLcon.State = ConnectionState.Closed Then
                                    SQLcon.Open()
                                End If
                                Dim cmd As SqlCommand = New SqlCommand(SQLstr, SQLcon)
                                Dim da As New SqlDataAdapter(SQLstr, SQLcon)
                                da.Fill(pDS, "ORDERS")
                                
                                'Added this to see if it helped
                                da.FillSchema(pDS, SchemaType.Mapped)
                            Catch ex As Exception
                                MessageBox.Show(ex.Message)
                            Finally
                                'close connection
                                SQLcon.Close()
                            End Try
                        End Sub
                        
                        Sub Add\_New\_Record()
                            Try
                                Dim dt As DataTable = pDS.Tables("Orders")
                                Dim dr As DataRow = dt.NewRow
                                dr.Item("OrderStatus") = "A"
                                dr.Item("SamsungRef") = "B"
                                dr.Item("ProductCode") = "C"
                                dr.Item("ProductSerialNo") = "D"
                                dr.Item("ProductionNo") = "E"
                                dt.Rows.Add(dr)
                        
                                'Update new row to database
                                Dim qry As String = "SELECT \* FROM Orders"
                                If SQLcon.State = ConnectionState.Closed Then SQLcon.Open()
                                Dim da1 As New SqlClient.SqlDataAdapter
                                da1.SelectCommand = New SqlClient.SqlCommand(qry, MAIN.data.Conn)
                                Dim cb1 As SqlClient.SqlCommandBuilder = New System.Data.SqlClient.SqlCommandBuilder(da1)
                                da1.Update(pDS, "Orders")
                        
                                'Had to add this to register change in dataset
                                pDS.Tables.Remove("Orders")
                                'Reatach datatable to dataset. Refresh primary keys
                        
                        G Offline
                        G Offline
                        gengel
                        wrote on last edited by
                        #11

                        Sorry this should just be Load_Table 'Reatach datatable to dataset. Refresh primary keys MAIN.data.Load_Table("SELECT * FROM Orders", "Orders")

                        G 1 Reply Last reply
                        0
                        • G gengel

                          Sorry this should just be Load_Table 'Reatach datatable to dataset. Refresh primary keys MAIN.data.Load_Table("SELECT * FROM Orders", "Orders")

                          G Offline
                          G Offline
                          gengel
                          wrote on last edited by
                          #12

                          I think I found the problem. Not sure why this makes a difference? da.FillSchema(pDS, SchemaType.Source, TableName)

                          1 Reply Last reply
                          0
                          • G gengel

                            Hi, I am a little confused now. the code that I am using is based on several references and websites. I thought that was the idea of ADO.net. Work with data offline. What is the corrct way of doing this. I have tried to simplify my code below.

                            Imports System
                            Imports System.Data
                            Imports System.Data.SqlClient

                            Public Class Example
                            Dim SQLcon As New SqlConnection
                            Dim pDS As New DataSet

                            Sub MakeConnect()
                                SQLcon.ConnectionString = "Data Source=192.168.10.24\\BDMS;" & \_
                                                                "Initial Catalog=FLATPAN;" & \_
                                                                "User ID=flatpan;" & \_
                                                                "Password=\*\*\*\*\*\*\*\*\*"
                                Try
                                    SQLcon.Open()
                                Catch ex As Exception
                                    MessageBox.Show(ex.Message)
                                End Try
                            
                            End Sub
                            
                            Sub Load\_Table()
                                Dim SQLstr As String = "SELECT \* FROM Orders"
                                Try
                                    'open connection
                                    If SQLcon.State = ConnectionState.Closed Then
                                        SQLcon.Open()
                                    End If
                                    Dim cmd As SqlCommand = New SqlCommand(SQLstr, SQLcon)
                                    Dim da As New SqlDataAdapter(SQLstr, SQLcon)
                                    da.Fill(pDS, "ORDERS")
                                    
                                    'Added this to see if it helped
                                    da.FillSchema(pDS, SchemaType.Mapped)
                                Catch ex As Exception
                                    MessageBox.Show(ex.Message)
                                Finally
                                    'close connection
                                    SQLcon.Close()
                                End Try
                            End Sub
                            
                            Sub Add\_New\_Record()
                                Try
                                    Dim dt As DataTable = pDS.Tables("Orders")
                                    Dim dr As DataRow = dt.NewRow
                                    dr.Item("OrderStatus") = "A"
                                    dr.Item("SamsungRef") = "B"
                                    dr.Item("ProductCode") = "C"
                                    dr.Item("ProductSerialNo") = "D"
                                    dr.Item("ProductionNo") = "E"
                                    dt.Rows.Add(dr)
                            
                                    'Update new row to database
                                    Dim qry As String = "SELECT \* FROM Orders"
                                    If SQLcon.State = ConnectionState.Closed Then SQLcon.Open()
                                    Dim da1 As New SqlClient.SqlDataAdapter
                                    da1.SelectCommand = New SqlClient.SqlCommand(qry, MAIN.data.Conn)
                                    Dim cb1 As SqlClient.SqlCommandBuilder = New System.Data.SqlClient.SqlCommandBuilder(da1)
                                    da1.Update(pDS, "Orders")
                            
                                    'Had to add this to register change in dataset
                                    pDS.Tables.Remove("Orders")
                                    'Reatach datatable to dataset. Refresh primary keys
                            
                            W Offline
                            W Offline
                            William Winner
                            wrote on last edited by
                            #13

                            You are correct...ADO.Net works with data offline. That's what I was saying. When you run an ExecuteNonQuery like in your second example, the DataSet that you filled previously will not reflect those changes because the DataSet is an offline version and the ExecuteNonQuery is updating the Online Version. The FillSchema should do the trick...though I'm not as familiar with it...it looks like it's there to set up the TableMapping for you. That will work for the first example. Let me show you an example of code that I run to add a new row to a database called "1 Populations"

                                Dim openedConnectionString As Boolean = False
                                If Not connectionString.State = ConnectionState.Open Then
                                    connectionString.Open()
                                    openedConnectionString = True
                                End If
                            
                                Dim insertionDS As New DataSet
                                Dim newDataAdapter As OleDbDataAdapter
                            
                                Dim sql As String = "SELECT \* FROM \[" & ActiveProject.Identifier & " Populations\] ORDER BY ID;"
                                newDataAdapter = New OleDb.OleDbDataAdapter(sql, connectionString)
                            
                                'Create mapping
                                newDataAdapter.TableMappings.Add("Table", "Populations")
                                With newDataAdapter.TableMappings(0).ColumnMappings
                                    .Add("ID", "ID")
                                    .Add("Name", "Name")
                                    .Add("Char ID", "Char ID")
                                    .Add("Stratum", "Stratum")
                                    .Add("PopLevel", "PopLevel")
                                End With
                            
                                'Make sure field names are bracketed
                                Dim cb As New OleDbCommandBuilder(newDataAdapter)
                                cb.QuotePrefix = " \["
                                cb.QuoteSuffix = "\] "
                            
                                'Add Table
                                newDataAdapter.Fill(insertionDS)
                            
                                'Get last ID number to increment
                                Dim lastIndex As Integer = 0
                            
                                With insertionDS.Tables("Populations")
                                    If .Rows.Count <> 0 Then
                                        lastIndex = .Rows(.Rows.Count - 1).Item("ID")
                                    End If
                            
                                    'Insert record
                                    Dim newRow As DataRow = .Rows.Add
                            
                                    newRow.BeginEdit()
                                    newRow.Item("ID") = lastIndex + 1
                                    newRow.Item("Name") = Population
                                    newRow.Item("Char ID") = ""
                                    newRow.Item("Stratum") = Stratum
                                    newRow.Item("PopLevel") = Level
                                    newRow.EndEdit()
                                End With
                            
                                'Save changes
                                newDataAdapter.InsertCommand = cb.GetInsertCommand
                                newDataAdapter.Update(insertionDS)
                            
                                newDataAdapter.Dispose()
                            
                                'If we opened the connectionstring, then close it
                            
                            1 Reply Last reply
                            0
                            Reply
                            • Reply as topic
                            Log in to reply
                            • Oldest to Newest
                            • Newest to Oldest
                            • Most Votes


                            • Login

                            • Don't have an account? Register

                            • Login or register to search.
                            • First post
                              Last post
                            0
                            • Categories
                            • Recent
                            • Tags
                            • Popular
                            • World
                            • Users
                            • Groups