我正在使用标准的ADO.NET 'DbConnection.GetSchema‘API读取VistaDB 4.0数据库的数据库模式。我还没有找到获取列的'Identity‘设置的方法吗?'Columns‘模式集合似乎没有对应的列,我也不知道还有没有其他应该查看的集合。
如果不能通过查询任何可用的集合,我是否必须查询一些系统表或视图?
任何帮助都将不胜感激。
发布于 2010-03-01 22:23:50
VistaDB中没有"sys“表。有一个数据库模式表,其中包含了您需要的大部分内容。
数据库架构
您可以使用数据库模式表获取数据库的标识列,如下所示:
select * from [database schema] where typeid = 6在帮助文件中查找typeid列表以及它们的含义。
一旦有了列表,就可以将其与表的类型it进行匹配,以查看标识列来自哪个表。
数据库架构表的唯一问题是您不能自引用或连接它自己(设计限制)。因此,如果您需要从自身提取和引用,则必须通过两个命令或通过一个临时表来完成。帮助文件中也有一个如何做到这一点的示例。
备用方式
您还可以使用VistaDB存储过程查找所有标识列:
select * from VistaDBColumnSchema() where is_identity = trueDDA
如果您需要查找下一个值、种子等,您也可以通过DDA (直接数据访问)方法获取这些值。
IVistaDBTableSchema对象的Identities属性是该表的标识的集合。然后,可以遍历该集合以提取单个值。
包含的标识信息包括种子、步骤、表名和列名。
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());
}
}
}
}
}https://stackoverflow.com/questions/2342418
复制相似问题