3

填充 DataSet 时,我使用 DataAdapter 的 MissingSchemaAction 的“AddWithKey”值。根据 MSDN:

在用数据填充数据集之前将模式信息添加到数据集可确保主键约束包含在数据集中的 DataTable 对象中。

但是,当我执行以下操作时:

DataColumn[] foo = TheDataSet.Tables["Table1"].PrimaryKey;

我得到 foo.Length 为 0。除此之外我还需要做些什么吗?:

string TheQuery = "SELECT * FROM Table1 LEFT OUTER JOIN Table2 ON Table1.EVENT_NUM = Table2.EVENT_USER_NUM;
using (SqlDataAdapter TheDataAdapter = new SqlDataAdapter(TheQuery, TheConnection)
{
    TheDataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
    TheDataAdapter.Fill(TheDataSet, "Table1");
}

请注意,如果我的查询是:

string TheQuery = "SELECT * FROM Table1";

一切都会好的。但是,如果有连接,我不会得到 PrimaryKey。这甚至可能(获取主键)吗?

编辑:起初,我没有意识到这是一个 JOIN。虽然,我已经测试了会返回 PrimaryKey 的 INNER JOINS。罪魁祸首似乎是这是一个 OUTER JOIN。因此,我更改了标题。

4

1 回答 1

2

来自msdn

如果 SelectCommand 返回 OUTER JOIN 的结果,则 DataAdapter 不会为生成的 DataTable 设置 PrimaryKey 值。您必须自己定义 PrimaryKey 以确保正确解析重复行。

于 2011-02-24T18:40:19.740 回答