Leer en inglés

Compartir vía


OdbcDataReader.GetSchemaTable Método

Definición

Devuelve un objeto DataTable que describe los metadatos de columna del OdbcDataReader.

C#
public override System.Data.DataTable? GetSchemaTable ();
C#
public System.Data.DataTable GetSchemaTable ();
C#
public override System.Data.DataTable GetSchemaTable ();

Devoluciones

DataTable que describe los metadatos de columna.

Implementaciones

Excepciones

La clase OdbcDataReader está cerrada.

Comentarios

El GetSchemaTable método devuelve metadatos sobre cada columna en el orden siguiente:

Columna DataReader Descripción
ColumnName Nombre de la columna; esto podría no ser único. Si no se puede determinar el nombre de columna, se devuelve un valor NULL. Este nombre siempre refleja la nomenclatura más reciente de la columna en la vista actual o el texto del comando.
ColumnOrdinal Ordinal basado en cero de la columna. Esta columna no puede contener un valor.
ColumnSize Longitud máxima permitida para un valor de la columna. Para las columnas que usan un tipo de datos de longitud fija, este es el tamaño del tipo de datos.
NumericPrecision Si DbType es un tipo de datos numérico, esta es la precisión máxima de la columna. La precisión depende de la definición de la columna. Si DbType no es un tipo de datos numérico, no use los datos de esta columna. Si el controlador ODBC subyacente devuelve un valor de precisión para un tipo de datos no numérico, este valor se usa en la tabla de esquemas.
NumericScale Si DbType es Decimal, el número de dígitos a la derecha del separador decimal. De lo contrario, se trata de un valor NULL. Si el controlador ODBC subyacente devuelve un valor de precisión para un tipo de datos no numérico, este valor se usa en la tabla de esquemas.
DataType Se asigna al tipo de Common Language Runtime de DbType.
ProviderType Tipo de controlador subyacente.
IsLong true si la columna contiene un objeto Long binario (BLOB) que contiene datos muy largos. La definición de datos muy largos es específica del controlador.
AllowDBNull true si el consumidor puede establecer la columna en un valor NULL o si el controlador no puede determinar si el consumidor puede establecer la columna en un valor NULL. En caso contrario, es false. Una columna puede contener valores null, aunque no se pueda establecer en un valor null.
IsReadOnly true si no se puede modificar la columna; de lo contrario false, .
IsRowVersion Se establece si la columna contiene un identificador de fila persistente que no se puede escribir y no tiene ningún valor significativo, salvo para identificar la fila.
IsUnique true: no hay dos filas en la tabla base (la tabla devuelta en BaseTableName) puede tener el mismo valor en esta columna. Se garantiza que IsUnique es true si la columna representa una clave por sí misma o si hay una restricción de tipo UNIQUE que solo se aplica a esta columna.

false: la columna puede contener valores duplicados en la tabla base. El valor predeterminado de esta columna es false.
IsKey true: la columna es uno de un conjunto de columnas del conjunto de filas que, en conjunto, identifican de forma única la fila. El conjunto de columnas con IsKey establecido en true debe identificar de forma única una fila en el conjunto de filas. No es necesario que este conjunto de columnas sea un conjunto mínimo de columnas. Este conjunto de columnas se puede generar a partir de una clave principal de tabla base, una restricción única o un índice único.

false: la columna no es necesaria para identificar de forma única la fila.
IsAutoIncrement true si la columna asigna valores a nuevas filas en incrementos fijos; de lo contrario false, . El valor predeterminado de esta columna es false.
BaseSchemaName Nombre del esquema en el origen de datos que contiene la columna. NULL si no se puede determinar el nombre del catálogo base. El valor predeterminado de esta columna es un valor NULL.
BaseCatalogName Nombre del catálogo del almacén de datos que contiene la columna. NULL si no se puede determinar el nombre del catálogo base. El valor predeterminado de esta columna es un valor NULL.
BaseTableName Nombre de la tabla o vista del almacén de datos que contiene la columna. Valor null, si no se puede determinar el nombre de la tabla base. El valor predeterminado de esta columna es un valor NULL.
BaseColumnName Nombre de la columna en el almacén de datos. Esto podría ser diferente del nombre de columna devuelto en la columna ColumnName si se usó un alias. Valor NULL si no se puede determinar el nombre de la columna base o si la columna del conjunto de filas se deriva, pero no idéntica a, una columna en el almacén de datos. El valor predeterminado de esta columna es un valor NULL.

Se devuelve una fila para cada columna del conjunto de resultados.

El proveedor de datos de .NET Framework para ODBC supone que la información de metadatos está disponible desde un controlador ODBC después de llamar a una de las funciones SQLPrepare, SQLExecute o SQLExecuteDirect . Para que el comportamiento del comando "SchemaOnly" funcione correctamente, SQLPrepare debe devolver la información de metadatos necesaria. No todos los controladores ODBC admiten esta función ni devuelven información de metadatos. En estos casos, faltará parte o toda la información de SchemaTable. Después de llamar a SQLPrepare, el proveedor de datos llama a la función ODBC SQLColAttribute para buscar la información de metadatos relacionada con cada columna en los resultados de la consulta (por ejemplo, IsLong, IsUnique, AllowDBNull, BaseTableName, BaseColumnName). Si el controlador subyacente no devuelve parte de esta información, los valores correspondientes de SchemaTable no se establecerán correctamente.

El proveedor de datos de .NET Framework para ODBC también llama a SQLPrimaryKeys para recuperar la información clave de cada tabla. Si el controlador ODBC subyacente no admite esta función, el proveedor de datos llama a SQLStatistics y elige uno de los índices únicos como clave principal de la tabla. Es posible que esto no siempre proporcione los resultados que desee.

OdbcCommandBuilder necesita la identificación correcta de las claves principales de la tabla para que funcione correctamente. Si no se devuelve BaseTableName para cada columna de los resultados de la consulta, el proveedor de datos de .NET Framework para ODBC intenta analizar la instrucción SQL para buscar los nombres de tabla implicados en la consulta. Esto funciona con instrucciones UPDATE, INSERT, DELETE y SELECT simples, pero no con procedimientos almacenados o instrucciones SELECT basadas en combinaciones. Si falta alguna o toda la información de esquema de esta tabla, no OdbcCommandBuilder funcionará correctamente, ya que no tiene información de esquema suficiente para generar automáticamente las instrucciones INSERT, UPDATE o DELETE correctas.

Para asegurarse de que las columnas de metadatos devuelven la información correcta, debe llamar a ExecuteReader con el parámetro de comportamiento establecido en KeyInfo. De lo contrario, algunas de las columnas de la tabla de esquema pueden devolver datos predeterminados, null o incorrectos.

Cuando se usa ODBC.NET a Oracle a través del controlador ODBC, las columnas de clave con alias no se reconocen como claves. Esto afecta a las columnas IsKey e IsUnique de la tabla de esquema de OdbcDataReader. También afecta a la capacidad de OdbcCommandBuilder para generar lógica de actualización. Considere la posibilidad de no usar un alias para una columna de clave principal.

Nota

El controlador ODBC de Microsoft Jet siempre devuelve columnas de índice y clave principal únicas que aceptan valores NULL, independientemente de si son que aceptan valores NULL o no. El controlador tampoco devuelve información de clave principal; solo devuelve una lista de índices únicos y sus columnas, incluidas las columnas de clave principal, sin diferenciar entre ellos.

Se aplica a

Producto Versiones
.NET 8 (package-provided), 9 (package-provided)
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7 (package-provided), 4.7, 4.7.1 (package-provided), 4.7.1, 4.7.2 (package-provided), 4.7.2, 4.8 (package-provided), 4.8, 4.8.1
.NET Standard 2.0 (package-provided)

Consulte también