Я хочу перечислить все таблицы и их количество строк в базе данных MS Access, в виде сетки. Я использую запрос следующим образом:
SELECT MSysObjects.Name, CLng(DCount('*',[name])) AS RecordCount
FROM MSysObjects WHERE (((MSysObjects.Type)=1)
AND (MSysObjects.Name NOT LIKE 'MSys*'))
ORDER BY MSysObjects.Name;
В панели MS Access Query это работает просто отлично. Но когда я запускаю запрос через объект OleDbCommand в .NET, хотя запрос создает набор результатов, я получаю ряд данных с MSysNavPaneGroupCategories в нем. Эта строка всегда выдает ошибку, когда я пытаюсь:
DataRow row = null;
do
{
row = dt.NewRow();
row["TableName"] = (string)dr["Name"];
row["RecordCount"] = (int)dr["RecordCount"]; // Fails here when dr["Name"]==MSysNavPaneGroupCategories
dt.Rows.Add(row);
} while (dr.Read());
Сообщение об ошибке:
System.InvalidOperationException было
необработанное.
Поставщик не может определить
Значение Int32. Например, строка была
только что создан, по умолчанию для
Столбец Int32 не был доступен, и
потребитель еще не установил новый
Значение Int32. Источник = "System.Data"
Таким образом, мой обходной путь - СДЕЛАТЬ таблицу TEMP и вместо этого читать из нее (или установить значение по умолчанию для столбца ..., которое преодолевает ошибку, но все еще включает в себя таблицу мошенников в наборе результатов).
Что здесь происходит? MSysNavPaneGroupCategories не должен был даже превращаться в набор результатов.
В системной таблице MSysNavPaneGroupCategories не так много информации.
Этот URL говорит, что MSysNavPaneGroupCategories является одной из трех системных таблиц, которые
определить все содержимое в
Панель навигации.
.. в Access 2007.
Этот Microsoft URL говорит
Панель навигации, новая в Microsoft
Office Access 2007, является центральным
место, из которого вы можете легко
просмотреть и получить доступ ко всей вашей базе данных
объекты (объекты базы данных: доступ
База данных содержит такие объекты, как
таблицы, запросы, формы, отчеты,
страницы, макросы и модули. Доступ
Проект содержит такие объекты, как
формы, отчеты, страницы, макросы и
модули.), запускать отчеты или вводить данные
прямо в таблицах.
... в Access 2007.
Почему эта таблица должна отображаться в списке таблиц базы данных Access 2K, когда это функция Access 2007, и почему она вообще отображается в запросе, для которого она не соответствует критериям?