public static SqlServerStoredProcedure SqlServerStoredProcedureCollectionToStoreProcedure(DataRow sqlServerStoredProcedure, DataTable sqlServerParametersColletions)
        {
            SqlServerStoredProcedure storedProcedure = new SqlServerStoredProcedure();

            storedProcedure.Name = sqlServerStoredProcedure["routine_name"].ToString();

            foreach (DataRow row in sqlServerParametersColletions.Rows)
            {
                SqlServerParameter parameter = new SqlServerParameter();
                parameter.DBName    = row["parameter_name"].ToString();
                parameter.Direction = SqlServerTranslatorHelper.GetDirection(row["parameter_mode"].ToString());

                SqlServerDbDataType dbDataType = new SqlServerDbDataType();
                dbDataType.ProviderType = SqlServerDataTypeConverter.String2DatabaseType(row["data_type"].ToString());
                dbDataType.Type         = SqlServerDataTypeConverter.DatabaseType2NetType(dbDataType.ProviderType);
                dbDataType.Precision    = SqlServerTranslatorHelper.GetPrecision(row["numeric_precision"]);
                dbDataType.Scale        = SqlServerTranslatorHelper.GetScale(row["numeric_scale"]);
                dbDataType.Size         = SqlServerTranslatorHelper.GetParameterSize(dbDataType.ProviderType, row);
                parameter.DbDataType    = dbDataType;

                storedProcedure.Parameters.Add(parameter);
            }

            return(storedProcedure);
        }
        private List <Parameter> GetProcedureResultSchema(DataTable schema)
        {
            List <Parameter> parameters = new List <Parameter>();

            foreach (DataRow row1 in schema.Rows)
            {
                Type type1 = (Type)row1["DataType"];
                int  num1  = -1;
                if (type1 == typeof(string))
                {
                    num1 = (int)row1["ColumnSize"];
                }

                SqlServerParameter parameter = new SqlServerParameter();
                parameter.DBName    = SqlServerTranslatorHelper.GetQualifiedName((string)row1["ColumnName"]);
                parameter.Direction = ParameterDirection.ReturnValue;

                SqlServerDbDataType dbDataType = new SqlServerDbDataType();
                dbDataType.Size         = num1;
                dbDataType.ProviderType = SqlServerDataTypeConverter.SqlDbType2DatabaseType(row1["ProviderType"]);
                dbDataType.Type         = type1;
                parameter.DbDataType    = dbDataType;

                parameters.Add(parameter);
            }
            return(parameters);
        }
        /// <summary>
        /// Gets the views.
        /// </summary>
        /// <param name="connection">The connection.</param>
        /// <returns></returns>
        public override List <View> GetViews(DbConnection connection)
        {
            List <View> views           = new List <View>();
            DataTable   viewsCollection = GetViewsCollection(connection);

            DataRow[] rows = viewsCollection.Select("", "table_schema, table_name ASC");

            foreach (DataRow view in rows)
            {
                string viewName = SqlServerTranslatorHelper.GetObjectName(view["table_schema"].ToString(), NamingHelper.EscapeObjectName(view["table_name"].ToString()));

                views.Add(
                    SqlServerViewTranslator.SqlServerViewCollectionToView(
                        view,
                        GetViewColumnsCollection(connection, viewName)));
            }

            return(views);
        }
        /// <summary>
        /// Gets the tables.
        /// </summary>
        /// <param name="connection">The connection.</param>
        /// <returns></returns>
        public override List <Table> GetTables(DbConnection connection)
        {
            List <Table> tables           = new List <Table>();
            DataTable    tablesCollection = GetTablesCollection(connection);

            DataRow[] rows = tablesCollection.Select("", "table_schema, table_name ASC");

            foreach (DataRow table in rows)
            {
                string tableName = SqlServerTranslatorHelper.GetObjectName(table["table_schema"].ToString(), NamingHelper.EscapeObjectName(table["table_name"].ToString()));

                tables.Add(
                    SqlServerTableTranslator.SqlServerTableCollectionToTable(
                        table,
                        GetTableColumnsCollection(connection, tableName, true),
                        GetTableForeignKeysCollection(connection, table["table_schema"].ToString(), table["table_name"].ToString())));
            }

            return(tables);
        }
        public override List <Parameter> GetSPResultSet(DbConnection connection, StoredProcedure procedure)
        {
            List <Parameter> parameters = new List <Parameter>();

            using (SqlCommand command = (SqlCommand)connection.CreateCommand())
            {
                command.CommandText = procedure.DBName;
                command.CommandType = CommandType.StoredProcedure;

                if (connection.ConnectionTimeout != -1)
                {
                    command.CommandTimeout = connection.ConnectionTimeout;
                }

                foreach (Parameter parameter in procedure.Parameters)
                {
                    SqlParameter parameterToAdd = command.Parameters.Add(
                        parameter.DBName,
                        SqlServerDataTypeConverter.DatabaseType2SqlDbType(parameter.DbDataType.ProviderType));
                    parameterToAdd.Direction = parameter.Direction;
                    parameterToAdd.Value     = SqlServerTranslatorHelper.GetDefaultParameterValue(parameter.DbDataType.Type);
                }

                SqlTransaction transaction = null;

                try
                {
                    transaction         = (SqlTransaction)connection.BeginTransaction();
                    command.Transaction = transaction;
                    int         index      = 0;
                    IDataReader dataReader = command.ExecuteReader(CommandBehavior.SchemaOnly);

                    try
                    {
                        do
                        {
                            DataTable table = dataReader.GetSchemaTable();

                            if (table != null)
                            {
                                parameters = GetProcedureResultSchema(table);
                            }

                            index++;
                        } while(dataReader.NextResult());
                    }
                    finally
                    {
                        if (dataReader != null)
                        {
                            dataReader.Dispose();
                        }
                    }
                }
                finally
                {
                    if (transaction != null)
                    {
                        transaction.Rollback();
                    }
                }
            }

            return(parameters);
        }