【问题标题】:DataSet - Ensuring PrimaryKey data when Filling with a query that is an outer joinDataSet - 使用外连接查询填充时确保 PrimaryKey 数据
【发布时间】:2011-03-02 17:59:52
【问题描述】:

在填充数据集时,我将“AddWithKey”值用于 DataAdapter 的 MissingSchemaAction。根据 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。于是,我改了标题。

【问题讨论】:

  • 表有主键吗?
  • 新信息:是的,有一个主键,但我刚刚意识到这是一个 JOIN 查询(​​两个表都有一个主键)
  • 请不要在标题中包含 C# 之类的标签。将它们保存在它们所属的标签中。

标签: c# database dataset dataadapter


【解决方案1】:

来自msdn

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多