public override void GetStoredProcedures(Common.Entities.MetaDataSchema.Project project) { foreach (Entities.MetaDataSchema.Database database in project.Databases) { System.Data.DataTable procedures = new DataTable(); System.Data.DataTable sqlServerTable = new DataTable(); procedures.Load(database.ParentProject.ExtractorManager.SelectStatement("Select * From " + database.Name + ".INFORMATION_SCHEMA.ROUTINES where ROUTINE_TYPE = 'PROCEDURE'"), LoadOption.OverwriteChanges); sqlServerTable.Load(database.ParentProject.ExtractorManager.SelectStatement("Select * From " + database.Name + ".sys.all_objects Where [Type] = 'P'"), LoadOption.OverwriteChanges); OnStartLoading(new Common.Events.LoadingEventArgs(database.Name, "Stored Procedures", "Database")); database.StoredProcedures.Clear(); foreach (DataRow row in procedures.Rows) { Entities.MetaDataSchema.StoredProcedure storedProcedure = new Common.Entities.MetaDataSchema.StoredProcedure(); storedProcedure.ParentDatabase = database; storedProcedure.Schema = row["Routine_Schema"].ToString(); storedProcedure.Name = row["Routine_Name"].ToString(); DataRow[] sqlRows = sqlServerTable.Select("[name] = '" + storedProcedure.Name + "'"); if (sqlRows.Length > 0) { storedProcedure.StoredProcedureId = sqlRows[0]["object_id"].ToString(); } //GetColumns(view); database.StoredProcedures.Add(storedProcedure); } OnEndLoading(new Common.Events.LoadingEventArgs(database.Name, "Stored Procedures", "Database")); procedures.Dispose(); } GC.Collect(); }
public override void GetStoredProcedureParameters(Common.Entities.MetaDataSchema.StoredProcedure procedure) { System.Data.DataTable functions = new DataTable(); string query = "select " + procedure.ParentDatabase.Name + ".sys.all_parameters.*," + procedure.ParentDatabase.Name + ".sys.types.name as typename From " + procedure.ParentDatabase.Name + ".sys.all_parameters inner join " + procedure.ParentDatabase.Name + ".sys.types on " + procedure.ParentDatabase.Name + ".sys.all_parameters.system_type_id = " + procedure.ParentDatabase.Name + ".sys.types.system_type_id and " + procedure.ParentDatabase.Name + ".sys.all_parameters.user_type_id = " + procedure.ParentDatabase.Name + ".sys.types.user_type_id where object_id = " + procedure.StoredProcedureId; functions.Load(procedure.ParentDatabase.ParentProject.ExtractorManager.SelectStatement(query), LoadOption.OverwriteChanges); OnStartLoading(new Common.Events.LoadingEventArgs(procedure.Name, "Parameters", "Stored Procedures")); procedure.Parameters.Clear(); foreach (DataRow row in functions.Rows) { Entities.MetaDataSchema.Column col = new Common.Entities.MetaDataSchema.Column(); col.ParentStoredProcedure = procedure; col.Name = row["name"].ToString(); col.OrdinalPosition = Convert.ToInt32(row["parameter_id"]); col.Precision = Convert.ToInt32(row["precision"]); col.Scale = Convert.ToInt32(row["scale"]); col.AllowNull = false; col.ColumnDataType.SQLType = row["typename"].ToString(); if (row["max_length"] != DBNull.Value) { col.Length = Convert.ToInt32(row["max_length"]) / 2; } col.IsIdentity = false; col.IsComputed = false; col.ColumnId = row["parameter_id"].ToString(); if (row["is_output"].ToString() == "1" || row["is_output"].ToString() == "True") { col.ColumnDirection = ColumnDirection.Output; procedure.Parameters.Add(col); } else { col.ColumnDirection = ColumnDirection.Input; procedure.Parameters.Add(col); } } OnEndLoading(new Common.Events.LoadingEventArgs(procedure.Name, "Parameters", "Stored Procedures")); GC.Collect(); }