我想使用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)次调用并合并数据 - 但这是必要的吗?没有什么比这更干净了吗?
答案 0 :(得分:0)
CommandBehavior.Default
的整数值为零。这就是CommandBehavior.Default | CommandBehavior.KeyInfo
与CommandBehavior.KeyInfo
但是,调用CommandBehavior.KeyInfo
只应该向模式添加信息,而不会影响返回的行,就像使用OleDb和SqlClients一样。
我猜这是特定于SqlCe对象的。