代码之家  ›  专栏  ›  技术社区  ›  alwayslearning

获取vistadb中列的“identity”设置

  •  1
  • alwayslearning  · 技术社区  · 16 年前

    我正在使用标准的ado.net“dbconnection.getschema”api读取vistadb 4.0数据库的数据库架构。我还没有找到获取列的“identity”设置的方法?“columns”架构集合似乎没有用于此的列,并且我不知道应该查找的任何其他集合。

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

    任何帮助都将不胜感激。

    1 回复  |  直到 16 年前
        1
  •  2
  •   Jason Short    16 年前

    vistadb中没有“sys”表。但有一个[数据库架构]表包含了您需要的大部分内容。

    [数据库架构]

    可以使用数据库架构表获取数据库的标识列,如下所示:

    select * from [database schema] where typeid = 6
    

    在帮助文件中查找typeid列表及其含义。

    然后,一旦拥有了列表,就可以将其与表的typeid相匹配,以查看identity列来自哪个表。

    数据库模式表的唯一问题是不能自引用或将其连接到自身(设计限制)。因此,如果需要从自身拉取和引用,则必须使用两个命令或通过一个临时表来完成。帮助文件中还有一个如何执行此操作的示例。

    交替方式

    还可以使用vistadb存储过程查找所有标识列:

    select * from VistaDBColumnSchema() where is_identity = true
    

    DDA

    如果需要查找下一个值、种子等,也可以通过dda(直接数据访问)方法获取这些值。

    ivistadbTableSchema对象的identities属性是该表的identities的集合。然后可以遍历该集合以提取单个值。

    包含的标识信息是seed、step、tablename和columnname。

    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());
                    }
                }
            }
        }
    }