我正在使用标准 ADO.NET 'DbConnection.GetSchema' API 读取 VistaDB 4.0 数据库的数据库架构。我还没有找到获取列的“身份”设置的方法?'Columns' 模式集合似乎没有为此的列,我不知道我应该研究的任何其他集合。
如果无法通过查询任何可用集合来实现,我是否必须查询某些系统表或视图?
任何帮助,将不胜感激。
VistaDB 中没有“sys”表。有一个 [database schema] 表,其中包含您需要的大部分内容。
[数据库架构]
您可以使用这样的数据库模式表获取数据库的标识列:
select * from [database schema] where typeid = 6
在帮助文件中查找 typeid 列表及其含义。
然后,一旦有了列表,就可以将其与表的 typeid 进行匹配,以查看标识列来自哪个表。
数据库模式表的唯一问题是您不能自引用或将其连接到自身(设计限制)。因此,如果您需要从自身中提取和引用,则必须通过两个命令或通过临时表来完成。帮助文件也有一个如何执行此操作的示例。
替代方式
您还可以使用 VistaDB 存储过程查找所有标识列:
select * from VistaDBColumnSchema() where is_identity = true
DDA
如果您需要查找下一个值、种子等,您也可以通过 DDA(直接数据访问)方法获得这些值。
IVistaDBTableSchema 对象上的 Identities 属性是该表的身份集合。然后可以遍历该集合以提取各个值。
包含的身份信息是种子、步骤、表名和列名。
ADO.NET GetSchemaTable 方式
是的,还有另一种方法。您可以在阅读器上调用 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());
}
}
}
}
}