Beispiel #1
0
        /// <summary>
        ///		Obtiene un proveedor de base de datos
        /// </summary>
        private IDbProvider GetDbProvider(ConnectionModel connection)
        {
            IDbProvider provider = CacheProviders.GetProvider(connection);

            // Si no se ha encontrado el proveedor en el diccionario, se crea uno ...
            if (provider == null)
            {
                // Crea el proveedor
                switch (connection.Type)
                {
                case ConnectionModel.ConnectionType.Spark:
                    provider = new SparkProvider(new SparkConnectionString(connection.Parameters.ToDictionary()));
                    break;

                case ConnectionModel.ConnectionType.SqlServer:
                    provider = new LibDbProviders.SqlServer.SqlServerProvider(new LibDbProviders.SqlServer.SqlServerConnectionString(connection.Parameters.ToDictionary()));
                    break;

                case ConnectionModel.ConnectionType.Odbc:
                    provider = new LibDbProviders.ODBC.OdbcProvider(new LibDbProviders.ODBC.OdbcConnectionString(connection.Parameters.ToDictionary()));
                    break;

                default:
                    throw new ArgumentOutOfRangeException($"Cant find provider for '{connection.Name}'");
                }
                // Abre el proveedor
                provider.Open();
                // Lo añade a la caché
                CacheProviders.Add(connection, provider);
            }
            // Devuelve el proveedor
            return(provider);
        }
Beispiel #2
0
        /// <summary>
        ///		Obtiene el esquema
        /// </summary>
        internal async Task <SchemaDbModel> GetSchemaAsync(SparkProvider provider, TimeSpan timeout, CancellationToken cancellationToken)
        {
            SchemaDbModel schema = new SchemaDbModel();
            List <string> tables = new List <string>();

            // Obtiene el esquema
            using (OdbcConnection connection = new OdbcConnection(provider.ConnectionString.ConnectionString))
            {
                // Abre la conexión
                await connection.OpenAsync(cancellationToken);

                // Obtiene las tablas
                using (DataTable table = connection.GetSchema("Tables"))
                {
                    foreach (DataRow row in table.Rows)
                    {
                        if (!cancellationToken.IsCancellationRequested &&
                            row.IisNull <string>("Table_Type").Equals("TABLE", StringComparison.CurrentCultureIgnoreCase))
                        {
                            tables.Add(row.IisNull <string>("Table_Name"));
                        }
                    }
                }
                // Carga las columnas
                if (!cancellationToken.IsCancellationRequested)
                {
                    using (DataTable table = connection.GetSchema("Columns"))
                    {
                        foreach (DataRow row in table.Rows)
                        {
                            if (!cancellationToken.IsCancellationRequested &&
                                tables.FirstOrDefault(item => item.Equals(row.IisNull <string>("Table_Name"), StringComparison.CurrentCultureIgnoreCase)) != null)
                            {
                                schema.Add(true,
                                           row.IisNull <string>("Table_Schem"),
                                           row.IisNull <string>("Table_Name"),
                                           row.IisNull <string>("Column_Name"),
                                           GetFieldType(row.IisNull <string>("Type_Name")),
                                           row.IisNull <string>("Type_Name"),
                                           row.IisNull <int>("Column_Size", 0),
                                           false,
                                           row.IisNull <string>("Is_Nullable").Equals("No", StringComparison.CurrentCultureIgnoreCase));
                            }
                        }
                    }
                }
                // Cierra la conexión
                connection.Close();
            }
            // Devuelve el esquema
            return(schema);
        }