добавление 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 с тем же именем(без учета регистра).
вы должны установить имя таблицы, которое вы хотите для вашего 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 );