C# 如何创建具有两个表之间关系的 Dataset 实例

C# How to create a Dataset instance with relations between two tables

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

关系是 "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# 还很陌生。

您应该将关系添加到 DataSetRelations 集合:

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