[dba-VB] Copy tables

Charlotte Foust cfoust at infostatsystems.com
Wed Feb 6 19:25:32 CST 2008


I've fallen over that one before too, and the best way to avoid that is
to put the code in a public helper class and then call it when you need
to do that task.

Charlotte Foust 

-----Original Message-----
From: dba-vb-bounces at databaseadvisors.com
[mailto:dba-vb-bounces at databaseadvisors.com] On Behalf Of Stuart
McLachlan
Sent: Wednesday, February 06, 2008 3:14 PM
To: Discussion concerning Visual Basic and related programming issues.
Subject: Re: [dba-VB] Copy tables

Glad it's not just me trying to get my head around .Net and data at the
moment. :-) After 15 years of Access and classic VB development, there's
so much new stuff to learn here :-(


On 6 Feb 2008 at 14:30, Gustav Brock wrote:

> Hi Stuart et al
> 
> Oh my, make a note on this should you ever wish to copy data between
DataSets or DataTables with method ImportRow.
> 
> The secret is the value of property RowState of the individual rows.
Rows read from a table have a RowState of Unchanged.
> If a row is copied to another DataSet/DataTable by method ImportRow,
RowState remains Unchanged.
> 
> In my code sample below, I marked rows as Modified with method
SetModified.
> 
> The Update method of the DataTableAdapter, which is called to write
the data rows to the underlying table, is quite clever as it doesn't
touch rows with RowState Unchanged.
> However, rows with RowState Modified will only be used to update
existing records in the target table, thus it will not attempt to append
or insert any such row. 
> 
> For a row to be inserted by the later Update call, it has to have
RowState set to Added.
> 
> So, for my code below, I have to decide if a row should update an
existing record, or if it should be appended, or if it should be ignored
- and then call the method SetModified or SetAdded or nothing:
> 
>                     // Mark row as modified.
>                     kundeRowS.SetModified();
> or:
>                     // Mark row as new.
>                     kundeRowS.SetAdded();
> 
> When I changed the code from SetModified to SetAdded and replaced the
Fill method with:
> 
>       kundeAdapterT.Update(kunderT);
> 
> all records were written to the target table.
> 
> Of course, if you can write your code to add rows not using method
ImportRow - with LoadDataRow or like:
> 
>                     kunderT.Rows.Add(rowToAdd);
> 
> RowState of those rows, I guess, will be switched to Added
automatically.
> 
> /gustav
> 
> 
> >>> Gustav at cactus.dk 05-02-2008 18:02 >>>
> Hi Stuart et al
> 
> No there is no GUI, just code.
> I have some code like this. It add rows but will not save them to the
database table:
> 
>                 VrsSourceTableAdapters.DataTableKundeTableAdapter
kundeAdapterS =
>                     new
VrsSourceTableAdapters.DataTableKundeTableAdapter();
>                 VrsSource.DataTableKundeDataTable kunderS;
> 
>                 VrsTargetTableAdapters.DataTableKundeTableAdapter
kundeAdapterT =
>                     new
VrsTargetTableAdapters.DataTableKundeTableAdapter();
>                 VrsTarget.DataTableKundeDataTable kunderT;
> 
>                 kunderS = kundeAdapterS.GetDataVrsKunder();
>                 kunderT = kundeAdapterT.GetDataVrsKunder();
> 
>                 foreach (VrsSource.DataTableKundeRow kundeRowS in
kunderS)
>                 {
>                     Console.WriteLine("Kunde: " + kundeRowS.navn +
"");
>                     Console.WriteLine("  Kundenr: " +
kundeRowS.kundeNr + "");
>                     // Mark row as modified.
>                     kundeRowS.SetModified();
>                     kunderT.ImportRow(kundeRowS);
>                 }
>  
>                 Console.WriteLine("s: " + kunderS.Count.ToString());
>                 Console.WriteLine("t: " + kunderT.Count.ToString());
> 
>                 kundeAdapterT.FillVrsKunder(kunderT);
> 
> Target table is residing in MSDE. 
> Count of s returns the count of records to add. 
> Count of t returns existing records + count of records to add.
> 
> What am I missing?
> 
> /gustav
> 
> 
> >>> stuart at lexacorp.com.pg 05-02-2008 00:06:55 >>>
> Do you mean have the user physically browse through the rows looking
for specific records?
> 
> If that is the case, I would probably go with a DatagridView bound to
the source data.
> When the user selects a row (double click, highlight and click a
button or whatever), read the 
> row data and feed it to a TableAdapter.Insert on the target table.
> 
> 
> On 4 Feb 2008 at 18:41, Gustav Brock wrote:
> 
> > Hi all
> > 
> > I have created two tableadapters, a source and a target, and need to
> > browse through the source looking for rows and, when a row meeting
> > some conditions is found, copy this to the target. What is the best
> > method? 
> > 
> > /gustav
> 
> 
> _______________________________________________
> dba-VB mailing list
> dba-VB at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/dba-vb
> http://www.databaseadvisors.com
> 


_______________________________________________
dba-VB mailing list
dba-VB at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/dba-vb
http://www.databaseadvisors.com





More information about the dba-VB mailing list