1

我正在使用标准 ADO.NET 'DbConnection.GetSchema' API 读取 VistaDB 4.0 数据库的数据库架构。我还没有找到获取列的“身份”设置的方法?'Columns' 模式集合似乎没有为此的列,我不知道我应该研究的任何其他集合。

如果无法通过查询任何可用集合来实现,我是否必须查询某些系统表或视图?

任何帮助,将不胜感激。

4

1 回答 1

2

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());
                }
            }
        }
    }
}
于 2010-03-01T14:23:49.597 回答