Получить настройку «Идентичность» для столбца в VistaDB - PullRequest
1 голос
/ 26 февраля 2010

Я читаю схему базы данных для базы данных VistaDB 4.0, используя стандартный API ADO.NET «DbConnection.GetSchema». Я не нашел способ получить параметр «Идентичность» для столбца? Кажется, что в коллекции схем 'Columns' нет столбца, и я не знаю ни одной другой коллекции, в которую мне следует обратиться.

Если это невозможно при запросе какой-либо из доступных коллекций, нужно ли запрашивать какую-либо системную таблицу или представление?

Любая помощь будет оценена.

1 Ответ

2 голосов
/ 01 марта 2010

В VistaDB нет таблиц "sys". Существует таблица [схема базы данных], которая содержит большую часть того, что вам нужно.

[схема базы данных]

Вы можете получить столбцы идентификаторов для базы данных, используя таблицу схемы базы данных следующим образом:

select * from [database schema] where typeid = 6

Найдите в файле справки список typeid и их значение.

Затем, получив список, вы можете сопоставить его с typeid для таблиц, чтобы узнать, из какой таблицы пришел столбец идентификаторов.

Единственный недостаток таблицы схемы базы данных заключается в том, что вы не можете самостоятельно ссылаться или присоединять ее к себе (ограничение проекта). Поэтому, если вам нужно извлечь и сослаться на себя, вы должны сделать это двумя командами или через временную таблицу. Файл справки также содержит пример того, как это сделать.

Альтернативный путь

Вы также можете найти все столбцы идентификаторов, используя хранимую процедуру VistaDB:

select * from VistaDBColumnSchema() where is_identity = true

ДВР

Если вам нужно найти следующее значение, начальное число и т. Д., Вы также можете получить их с помощью методов DDA (прямой доступ к данным).

Свойство Identities объекта IVistaDBTableSchema представляет собой набор идентификаторов для этой таблицы. Затем эту коллекцию можно пройти, чтобы получить индивидуальные значения.

Идентификационная информация включает семя, шаг, имя таблицы и имя столбца.

ADO.NET GetSchemaTable Way

И да, есть еще один способ. Вы можете вызвать GetSchemaTable для считывателя, чтобы получить дополнительную информацию о базовой структуре.

using (VistaDBConnection cn = new VistaDBConnection("Data Source=" + dbName))
{
    cn.Open();

    using (VistaDBCommand cmd = new VistaDBCommand("Select * from simpletable", cn))
    {
        using (VistaDBDataReader myReader = cmd.ExecuteReader(CommandBehavior.KeyInfo))
        {
            //Retrieve column schema into a DataTable.
            DataTable schemaTable = myReader.GetSchemaTable();

            foreach (DataRow myField in schemaTable.Rows)
            {
                foreach (DataColumn myProperty in schemaTable.Columns)
                {
                    System.Diagnostics.Debug.WriteLine(myProperty.ColumnName + " = " + myField[myProperty].ToString());
                }
            }
        }
    }
}
...