Я хочу использовать ExecuteReader с 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) вызова и объединить данные - но нужно ли это? Нет ничего чище?