在数据集中添加数据表

Posted

技术标签:

【中文标题】在数据集中添加数据表【英文标题】:adding a datatable in a dataset 【发布时间】:2012-08-24 02:46:45 【问题描述】:

我正在向这样的数据集添加数据表:

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

但是下一次,当数据表更新时,它会反映在数据集中吗?或者我们需要写一些代码来让它体现出来?

另外,如果数据表存在于已经使用的数据集中,我正在检查数据集:

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

在第一次迭代中,ds.Tables.Contains("dtImage") 为 false,因此,ds.Tables.Add(dtImage) 将表添加到数据集中。但是在第二次迭代中,ds.Tables.Contains("dtImage") 再次为 false,但ds.Tables.Add(dtImage) 抛出错误:

数据表已经属于这个数据集。

如果数据集不包含名为“dtImage”的数据表,为什么会抛出错误?

更新:谢谢,问题已解决。请回答这个问题:

但是下一次,当数据表更新时,它会是 反映在数据集中?或者我们需要编写一些代码来实现 反映?

【问题讨论】:

创建数据表的代码是什么样的?你把它命名为 dtImage -> Dim dtImage as DataTable = New DataTable("dtImage") 因为您正在为ds.tables.Contains(""); 方法提供硬编码值....使用ds.Tables.contains(footable.tablename); 进行检查 【参考方案1】:
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);

【讨论】:

【参考方案2】:

只要给 DataTable 起任何名字就好了:

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

【讨论】:

【参考方案3】:

你必须将你想要的 tableName 设置为你的 dtimage,例如

dtImage.TableName="mydtimage";


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

它将反映在数据集中,因为数据集是数据表 dtimage 的容器 并且您的 dtimage 上有一个参考

【讨论】:

这很有帮助。谢谢!【参考方案4】:

我假设您尚未设置 DataTable 的 TableName 属性,例如通过构造函数:

var tbl = new DataTable("dtImage");

如果您不提供名称,它将自动创建为"Table1",下一个表将获得"Table2",依此类推。

那么解决方案是提供TableName,然后与Contains(nameOfTable)联系。

澄清:如果该 DataTable 已经属于 DataSet(相同的引用),您将获得一个 ArgumentException。如果 DataSet 中已有同名的 DataTable(不区分大小写),您将获得 DuplicateNameException

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

【讨论】:

哦,谢谢,是不是第一次没有报错?那么,第二次也会尝试使用表名“Table1”创建? @ManikandanSigamani:我认为这是误解,我的意思是 TableName 将在末尾使用连续的数字创建,所以Tabel1,Table2,Table3,...。因此,由于您没有提供名称,因此它始终是唯一的,并且 Contains 返回 false。但是,当您添加相同的 DataTable 引用时,您会遇到异常。如果名字有问题,你不会得到ArgumentException(...已经属于...),而是DuplicateNameException 哇,这就像树林里的钉子一样,感谢@TimSchmelter 的解释:)

以上是关于在数据集中添加数据表的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中将数据集中的值添加到一起? [复制]

在H2数据库的嵌套集中创建存储过程添加节点

如何使用 Pytorch 将增强图像添加到原始数据集中?

SAS 中怎么把一个数据集中的某个变量 添加到另一个数据集中?谢谢高手指教。

在强类型数据集中添加新行?

将一列从一个数据集中添加到另一个