2016-08-25 49 views
0

那么这就是我的问题。我试图查询一个远程postgresql数据库,然后用结果填充两个相关的实例化表,所以我可以填写一个表格,显示两个表的信息。用单个表做这件事很简单,但现在我无法正确定义关系。我得到“对象引用未设置为对象的实例”错误什么即时做错了?C#如何创建一个数据集实例与两个表之间的关系

关系是“组件/ PROVIDER_ID”到“供应商/ ID”这样我就可以在组件自动填写表单提供商领域(虽然做了搜索查询)。

继承人我的代码:

OdbcDataAdapter sdata = new OdbcDataAdapter(//Query string whatever); 
OdbcDataAdapter sdata2 = new OdbcDataAdapter(//Query string whatever); 

DataSet ds = new DataSet(); //new dataset instance 

DataTable dtbl = new DataTable(); //two new instanced tables 
DataTable dtbl2 = new DataTable(); 

sdata.Fill(dtbl); //fill both tables with each query data 
sdata2.Fill(dtbl2); 

ds.Tables.Add(dtbl); //Add those tables to DataSet 
ds.Tables.Add(dtbl2); 

//So now im tring to create a relation between both tables 
// im getting "“Object reference not set to an instance of an object” 

DataRelation dr = new DataRelation("provcomp", 
ds.Tables["dtbl"].Columns["id"], 
ds.Tables["dtbl2"].Columns["id_prov_comp"]); 

而且我想,以后我需要在为列创建某些键一些建议。

我可以得到一些帮助吗?请记住,即时编程相当新,一般编程和特别是C#。

+1

我不认为你的表有名字' “DTBL”'和' “dtbl2”'。他们是变量名称。我想你可以像这样安全地使用它们:'dtbl.Columns [“id”],dtbl2.Columns [“id_prov_comp”]'(检查那些列已经创建) – ASh

+0

数据集是否包含一个名为“ dtbl“?不,你没有设置表名。因此'ds.Tables [“dtbl”]'不起作用。但是,您可以在将表添加到DataSet后设置名称,然后再使用它们。 'ds.Tables [0] .TableName = “DTBL”;' –

+0

[创建和配置在Visual Studio中的数据集(https://msdn.microsoft.com/en-us/library/04y282hb.aspx) –

回答

1

您应该将关系添加到收藏RelationsDataSet的:

DataSet ds = new DataSet(); //new dataset instance 
DataTable dtbl = new DataTable("Your Parent TableName"); //two new instanced tables 
DataTable dtbl2 = new DataTable("Your Child TableName"); 
sdata.Fill(dtbl); //fill both tables with each query data 
sdata2.Fill(dtbl2); 
ds.Tables.Add(dtbl); //Add those tables to DataSet 
ds.Tables.Add(dtbl2); 
ds.Relations.Add("Your Relation Name",dtbl.Columns["id"], dtbl2.Columns["id_prov_comp"]); 

//or 
//ds.Relations.Add(ds.Tables["dtbl"].Columns["id"], ds.Tables["dtbl2"].Columns["id_prov_comp"]); 

ds.AcceptChanges(); 
+0

添加了表名和ds.AcceptChanges。但仍然有一个空白的形式。 –

+0

你是加关系。但不是关系添加到数据集。 ds.Relations.Add(“您的关系名称”,dtbl.Columns [“id”],dtbl2.Columns [“id_prov_comp”]); 或 DataRelation dr = new DataRelation(“provcomp”, ds.Tables [“dtbl”]。Columns [“id_prov_comp”], ds.Tables [“dtbl2”]。Columns [“id”]); ds.Relations.Add(dr); –

+1

将该关系添加到数据集解决了该问题(如上所述正确地添加了命名表,谢谢。 –

相关问题