Получить настройку "Идентичность" для столбца в 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());
}
}
}
}
}