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

StackOverflow https://stackoverflow.com/questions/2342418

  •  23-09-2019
  •  | 
  •  

Вопрос

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

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

Будем признательны за любую помощь.

Это было полезно?

Решение

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

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

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

select * from [database schema] where typeid = 6

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

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

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

Альтернативный Способ

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

select * from VistaDBColumnSchema() where is_identity = true

ДВР

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

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

Включенная идентификационная информация - это начальное значение, Шаг, имятаблицы и Имястолбца.

ADO.NET Выбираемый Способ

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

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());
                }
            }
        }
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top