Pregunta

Estoy leyendo el esquema de base de datos para la base de datos VistaDB 4.0 ADO.NET utilizando la norma API 'DbConnection.GetSchema'. No he encontrado una manera de obtener la 'identidad' escenario de una columna? La colección de esquemas 'Columnas' no parecen tener una columna para esto y yo no tengo conocimiento de ninguna otra colección que debería considerar.

Si no es posible mediante la consulta de cualquiera de las colecciones disponibles, tengo que consultar alguna tabla del sistema o ver?

Cualquier ayuda sería apreciada.

¿Fue útil?

Solución

No hay "sys" tablas en VistaDB. Hay una mesa de [esquema de base] que contiene la mayor parte de lo que necesita sin embargo.

[esquema de base]

Usted puede obtener las columnas de identidad de una base de datos utilizando la tabla de esquema de base de la siguiente manera:

select * from [database schema] where typeid = 6

Buscar en el archivo de ayuda para la lista typeid y lo que significan.

A continuación, una vez que tenga la lista, puede hacerlo coincidir con el typeid para las tablas para ver qué tabla de la columna de identidad de procedencia.

El único problema con la tabla de esquema de base de datos es que no se puede hacer referencia a uno mismo o unirse a sí mismo (limitación de diseño). Así que si usted tiene que tirar y referencia de sí mismo que tiene que hacerlo en dos órdenes, o por medio de una tabla temporal. El archivo de ayuda tiene un ejemplo de cómo hacer esto también.

Camino alternativo

También puede encontrar todas las columnas de identidad utilizando un proc almacenado VistaDB:

select * from VistaDBColumnSchema() where is_identity = true

DDA

Si usted necesita encontrar el valor siguiente, semillas, etc también se puede obtener a través de los PDD (Data Access) Directo métodos.

La propiedad identidades en un objeto IVistaDBTableSchema es una colección de las identidades de esa tabla. Esa colección puede entonces ser recorrido para tirar de los valores individuales.

La información de identidad se incluye el Seed, Step, Tablename, y NombreDeColumna.

ADO.NET GetSchemaTable Camino

Y sí, todavía hay otra manera. Puede llamar GetSchemaTable en un lector de conseguir algo más de información acerca de la estructura subyacente.

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());
                }
            }
        }
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top