2010-02-26 51 views
1

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

如果通过查询任何可用集合是不可能的,那么我是否必须查询某个系统表或视图?

任何帮助,将不胜感激。

回答

2

有在VistaDB的没有 “SYS” 表。有一个[数据库模式]表,其中包含大部分你需要的东西。

[数据库模式]

可以使用数据库架构的表像这样得到一个数据库中的标识列:

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()); 
       } 
      } 
     } 
    } 
} 
相关问题