15

I'm adding a datatable to a dataset like this:

DataTable dtImage = new DataTable();
//some updates in the Datatable
ds.Tables.Add(dtImage);

But the next time, when the datatable gets updated, will it be reflected in the dataset? or we need to write some code to make it reflected?

Also, I'm checking the dataset if the datatable exists in the dataset already using:

if(!ds.Tables.Contains("dtImage"))
    ds.Tables.Add(dtImage);

In the first iteration, ds.Tables.Contains("dtImage") is false, so, ds.Tables.Add(dtImage) adds the table to the dataset. But in the second iteration, ds.Tables.Contains("dtImage") is false again, but ds.Tables.Add(dtImage) throws an error:

Datatable already belongs to this dataset.

If the dataset doesn't contain the datatable named "dtImage", why is it throwing an error?

Update: Thanks, that issue got solved. Pls answer this:

But the next time, when the datatable gets updated, will it be reflected in the dataset? or we need to write some code to make it reflected?

Manikandan Sigamani
  • 1,964
  • 1
  • 15
  • 28
  • 1
    what does your code look like for creating the datatable? Did you name it dtImage -> Dim dtImage as DataTable = New DataTable("dtImage") – Robert Aug 29 '12 at 13:14
  • 1
    Because you are providing hardcoded value to `ds.tables.Contains("");` method....Check it using `ds.Tables.contains(footable.tablename);` – Mayank Pathak Aug 29 '12 at 13:17

4 Answers4

14

I assume that you haven't set the TableName property of the DataTable, for example via constructor:

var tbl = new DataTable("dtImage");

If you don't provide a name, it will be automatically created with "Table1", the next table will get "Table2" and so on.

Then the solution would be to provide the TableName and then check with Contains(nameOfTable).

To clarify it: You'll get an ArgumentException if that DataTable already belongs to the DataSet (the same reference). You'll get a DuplicateNameException if there's already a DataTable in the DataSet with the same name(not case-sensitive).

http://msdn.microsoft.com/en-us/library/as4zy2kc.aspx

Tim Schmelter
  • 450,073
  • 74
  • 686
  • 939
  • Oh thanks, is it that why the first time, it doesn't throw an error? So, the second time too, it'll try to create with the table name "Table1"? – Manikandan Sigamani Aug 29 '12 at 13:18
  • @ManikandanSigamani: I trhink that was misunderstandable, i meant that the TableName will be created with consecutive numers at the end, so `Tabel1,Table2,Table3,...`. So since you haven't provided a name, it will always be unique and Contains returns false. But when you add the same reference of a DataTable, you'll get the exception. If the name would be the problem, you wouldn't get an `ArgumentException`(...already belongs...) but a `DuplicateNameException`. – Tim Schmelter Aug 29 '12 at 13:29
  • 1
    Wow that stayed like a nail in woods, thanks for the explanation @TimSchmelter:) – Manikandan Sigamani Aug 29 '12 at 13:40
6

you have to set the tableName you want to your dtimage that is for instance

dtImage.TableName="mydtimage";


if(!ds.Tables.Contains(dtImage.TableName))
        ds.Tables.Add(dtImage);

it will be reflected in dataset because dataset is a container of your datatable dtimage and you have a reference on your dtimage

Soner Gönül
  • 97,193
  • 102
  • 206
  • 364
Hassan Boutougha
  • 3,871
  • 1
  • 17
  • 17
6

Just give any name to the DataTable Like:

DataTable dt = new DataTable();
dt = SecondDataTable.Copy();    
dt .TableName = "New Name";
DataSet.Tables.Add(dt );
Himanshu Shukla
  • 145
  • 2
  • 1
0
DataSet ds = new DataSet();

DataTable activity = DTsetgvActivity.Copy();
activity.TableName = "activity";
ds.Tables.Add(activity);

DataTable Honer = DTsetgvHoner.Copy();
Honer.TableName = "Honer";
ds.Tables.Add(Honer);

DataTable Property = DTsetgvProperty.Copy();
Property.TableName = "Property";
ds.Tables.Add(Property);


DataTable Income = DTsetgvIncome.Copy();
Income.TableName = "Income";
ds.Tables.Add(Income);

DataTable Dependant = DTsetgvDependant.Copy();
Dependant.TableName = "Dependant";
ds.Tables.Add(Dependant);

DataTable Insurance = DTsetgvInsurance.Copy();
Insurance.TableName = "Insurance";
ds.Tables.Add(Insurance);

DataTable Sacrifice = DTsetgvSacrifice.Copy();
Sacrifice.TableName = "Sacrifice";
ds.Tables.Add(Sacrifice);

DataTable Request = DTsetgvRequest.Copy();
Request.TableName = "Request";
ds.Tables.Add(Request);

DataTable Branchs = DTsetgvBranchs.Copy();
Branchs.TableName = "Branchs";
ds.Tables.Add(Branchs);
Ata Hoseini
  • 117
  • 1
  • 4