C#,SQL:在一次调用中收集DataTable Rows和PrimaryKey信息?

时间:2011-07-05 14:42:28

标签: c# sql database

我想使用ExecuteReader with CommandBehavior从SQL表中收集数据以及该表的PrimaryKey信息。

我只知道如何做其中一个。如果我指定CommandBehavior来收集KeyInfo,则不会收集数据。如果我使用默认值并收集数据,则不会收集KeyInfo。

DataTable Collect(string tableName) {
  DataTable table = new DataTable(tableName);
  if (!String.IsNullOrEmpty(tableName)) {
    using (SqlCeCommand cmd = new SqlCeCommand("SELECT * FROM " + tableName, new SqlCeConnection(Connection))) {
      cmd.Connection.Open();
      // this line will collect the Primary Key information: (Rows.Count = 0)
      table.Load(cmd.ExecuteReader(CommandBehavior.KeyInfo));
      // this line will collect the Row Data:
      table.Load(cmd.ExecuteReader());
      // I know the using clause is supposed to do this, but it can take too long
      cmd.Connection.Close();
    }
  }
  return table;
}

我试图通过使用两个标志来收集它们:

      CommandBehavior cb = CommandBehavior.Default | CommandBehavior.KeyInfo
      table.Load(cmd.ExecuteReader(cb));

但是,这仍然会导致返回0个DataRows。

当然,我可以进行两(2)次调用并合并数据 - 但这是必要的吗?没有什么比这更干净了吗?

1 个答案:

答案 0 :(得分:0)

CommandBehavior.Default的整数值为零。这就是CommandBehavior.Default | CommandBehavior.KeyInfoCommandBehavior.KeyInfo

没有区别的原因

但是,调用CommandBehavior.KeyInfo只应该向模式添加信息,而不会影响返回的行,就像使用OleDb和SqlClients一样。

我猜这是特定于SqlCe对象的。