在数据集中添加数据表

15

我正在将一个datatable添加到一个dataset中,代码如下:

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,但 ds.Tables.Add(dtImage) 抛出错误:

Datatable already belongs to this dataset.

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

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

但是下一次当数据表被更新时,它是否会反映在数据集中?还是我们需要编写一些代码来使其反映?


1
你创建DataTable的代码是什么样子的?你把它命名为dtImage了吗? -> 声明一个名为dtImage的DataTable变量:Dim dtImage as DataTable = New DataTable("dtImage") - Robert
1
因为您正在向 ds.tables.Contains(""); 方法提供硬编码值...请使用 ds.Tables.contains(footable.tablename); 进行检查。 - Mayank Pathak
4个回答

14

我假设你还没有通过构造函数设置DataTableTableName属性:

var tbl = new DataTable("dtImage");
如果您不提供名称,则会自动创建一个名为"Table1"的表,下一个表将获得"Table2"以此类推。
解决方法是提供TableName并使用Contains(nameOfTable)进行检查。
澄清一下:如果该DataTable已属于DataSet(相同引用),则会出现ArgumentException。 如果DataSet中已经存在具有相同名称(不区分大小写)的DataTable,则会出现DuplicateNameExceptionhttp://msdn.microsoft.com/en-us/library/as4zy2kc.aspx

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

6

您需要将要使用的表名设置为您的dtimage,例如:

dtImage.TableName="mydtimage";


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

因为数据集(dataset)是您数据表(dtimage)的容器,并且您在dtimage上有引用(reference),所以它会反映在数据集中。


6

只需给DataTable命名即可,例如:

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

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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接