C#如何使用两个表之间的关系创建数据集实例

时间:2016-08-25 10:33:57

标签: c# winforms postgresql foreign-keys relation

那就是我的问题。我正在尝试查询远程postgresql数据库,然后用结果填充两个RELATED实例表,所以我可以填写一个显示两个表的信息的表单。使用单个表执行此操作很简单,但现在我无法正确定义关系。我得到“对象引用未设置为对象的实例”错误我做错了什么?

Relation是“components / provider_id”到“provider / 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 个答案:

答案 0 :(得分:1)

您应该将关系添加到DataSet的<{3}}集合:

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