Получить настройку "Идентичность" для столбца в VistaDB

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

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

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

1 ответ

Решение

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

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

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

select * from [database schema] where typeid = 6

Посмотрите в файле справки список typeid и что они значат.

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

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

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

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

select * from VistaDBColumnSchema() where is_identity = true

DDA

Если вам нужно найти следующее значение, начальное число и т. Д., Вы также можете получить их с помощью методов 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());
                }
            }
        }
    }
}
Другие вопросы по тегам