Listar Columnas para SQL, Oracle o X Motor de Datos en C#

“-Necesitamos poder manejar diferentes bases de datos en el sistema.”

¿Te suena? Por alguna u otra razón, llega aquel momento en el que debemos manejar más de un gestor/motor de datos para manipular data. Para esta ocasión, extraer su extructura.

     public object GetMainTableSchema(InternalConnection internalConnection)
        {
            var conn = ConnStringHelper.CreateConnection(internalConnection.Provider, internalConnection.HostName,
                internalConnection.User, internalConnection.Password);
            string query;
            switch (internalConnection.Provider)
            {
                case "OraOLEDB.Oracle":
                    query = string.Format("SELECT COLUMN_NAME Name, data_type Type, data_length Length, case when nullable = 'N' then 0 when nullable = 'Y' then 1 else 0 end IsNull FROM user_tab_cols WHERE table_name = '{0}'",
                        internalConnection.TableName.ToUpperInvariant());
                    break;
                case "MySQL":
                    query = string.Format("SHOW COLUMNS FROM {0};",
                        internalConnection.TableName.ToUpperInvariant());
                    break;
                case "SQLOLEDB":
                    query = string.Format("SELECT column_name [Name], data_type [Type],character_maximum_length [Length], (case when is_nullable = 'NO' then 0 when is_nullable = 'YES' then 1 end) [IsNull]  FROM [{0}].information_schema.columns WHERE table_name = '{1}'",
                        internalConnection.Database, internalConnection.TableName.ToUpperInvariant());
                    break;
                default:
                    query = "";
                    break;
            }
            ...
        }
  1. La función recibe un objeto del tipo “InternalConnection” (al final del post) que contiene la información necesaria de la estructura a consultar.
  2. En la primera sentencia se crea una conexión con los datos suministrados (en mi caso, OleDbConnection o IDbConnection).
  3. Luego se toma el proveedor para luego determinar el query a utilizar.

Bastante simple.

 

InternalConnection.cs
 public struct InternalConnection
    {
        public string Provider { get; set; }
        public string Database { get; set; }
        public string TableName { get; set; }
    }

Happy Coding ✌

Anuncios

¿Quieres agregar algo?

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s