填充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。罪魁祸首似乎是这是一个外部联接的事实。因此,我改变了标题。答案 0 :(得分:2)
来自msdn:
如果SelectCommand返回 OUTER JOIN的结果, DataAdapter不会设置PrimaryKey 结果DataTable的值。您 必须自己定义PrimaryKey 确保重复的行 正确解决了。