DataSet - 使用作为外部联接的查询填充时确保PrimaryKey数据

时间:2010-06-11 16:13:08

标签: c# database dataset dataadapter

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

  

将架构信息添加到DataSet   在填充数据之前确保   主键约束是   包含在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。这甚至可能(获得主键)?

编辑:起初,我没有意识到这是一个加入。虽然,我已经测试了将返回PrimaryKey的INNER JOINS。罪魁祸首似乎是这是一个外部联接的事实。因此,我改变了标题。

1 个答案:

答案 0 :(得分:2)

来自msdn

  

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