добавление datatable в dataset

я добавляю datatable в такой набор данных:

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

но в следующий раз, когда datatable будет обновлен, будет ли он отражен в наборе данных? или нам нужно написать код, чтобы он отразился?

кроме того, я проверяю набор данных, если datatable существует в наборе данных, уже использующем:

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

на первой итерации,ds.Tables.Contains("dtImage") false, таким образом, ds.Tables.Add(dtImage) добавляет таблицу в набор данных. Но во второй итерации, ds.Tables.Contains("dtImage") снова false, но!--5--> выдает ошибку:

Datatable уже принадлежит этому набору данных.

если набор данных не содержит datatable с именем "dtImage", почему он выдает ошибку?

Update: Спасибо, эта проблема решена. Пожалуйста, ответьте на это:

но в следующий раз, когда datatable будет обновлен, это будет отражается в наборе данных? или нам нужно написать код, чтобы сделать это отражены?

3 ответов


Я предполагаю, что вы не настроили TableName свойство DataTable, например, через конструктор:

var tbl = new DataTable("dtImage");

если вы не укажете имя, оно будет автоматически создано с помощью "Table1", следующая таблица получит "Table2" и так далее.

тогда решением было бы предоставить TableName а затем проверьте с Contains(nameOfTable).

до разъяснить это: вы получите ArgumentException если этот DataTable уже принадлежит DataSet (то же самое ссылка.) Ты получишь DuplicateNameException если в наборе данных уже есть DataTable с тем же именем(без учета регистра).

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


вы должны установить имя таблицы, которое вы хотите для вашего dtimage, например

dtImage.TableName="mydtimage";


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

это будет отражено в dataset, потому что dataset является контейнером вашего datatable dtimage и у вас есть ссылка на ваш dtimage


просто дайте любое имя DataTable как:

DataTable dt = new DataTable();
dt = SecondDataTable.Copy();    
dt .TableName = "New Name";
DataSet.Tables.Add(dt );