using System; using System.Data; using System.Data.SqlClient; using System.Windows.Forms; namespace ServerExplorer.UI { public partial class FrmProcedimientos : Form { #region Declarations private readonly SqlConnection _cnx; #endregion #region Form life cycle public FrmProcedimientos(string cnxString) { InitializeComponent(); _cnx = new SqlConnection(cnxString); } private void frmProcedimientos_Load(object sender, EventArgs e) { LoadProcedures(); } #endregion #region Events private void lsvProcs_SelectedIndexChanged(object sender, EventArgs e) { if (lsvProcs.SelectedItems.Count <= 0) { return; } string name = lsvProcs.SelectedItems[0].SubItems[0].Text; string schema = lsvProcs.SelectedItems[0].SubItems[1].Text; LoadProcedure(schema, name); } private void btnRefresh_Click(object sender, EventArgs e) { LoadProcedures(); } #endregion #region Private methods private void LoadProcedures() { // Obtener un datatable con todos los procedimientos de la base de datos. var da = new SqlDataAdapter( "SELECT ROUTINE_NAME Name, ROUTINE_SCHEMA [Schema], CREATED CreateDate, ROUTINE_TYPE [Type] FROM INFORMATION_SCHEMA.ROUTINES", _cnx); var dt = new DataTable(); _cnx.Open(); da.Fill(dt); _cnx.Close(); // Mostrar todos los procedimientos lsvProcs.Items.Clear(); foreach (DataRow dr in dt.Rows) { ListViewItem item = lsvProcs.Items.Add((String)dr["Name"]); item.SubItems.Add((string)dr["Schema"]); item.SubItems.Add(((DateTime)dr["CreateDate"]).ToShortDateString()); item.SubItems.Add((string)dr["Type"]); } } private void LoadProcedure(string schema, string name) { SqlDataAdapter dataAdapter; _cnx.Open(); if (_cnx.ServerVersion.StartsWith("10.")) { dataAdapter = new SqlDataAdapter(@" SELECT ISNULL(smsp.definition, ssmsp.definition) AS [Definition] FROM sys.all_objects AS sp INNER JOIN sys.schemas sn ON sp.schema_id = sn.schema_id LEFT OUTER JOIN sys.sql_modules AS smsp ON smsp.object_id = sp.object_id LEFT OUTER JOIN sys.system_sql_modules AS ssmsp ON ssmsp.object_id = sp.object_id WHERE (sp.type = N'P' OR sp.type = N'RF' OR sp.type = N'PC' OR sp.type = N'IF' OR sp.type = N'FN' OR sp.type = N'TF') AND (sp.name = @name and sn.name = @schema) ", _cnx); dataAdapter.SelectCommand.Parameters.AddWithValue("@Name", name); dataAdapter.SelectCommand.Parameters.AddWithValue("@Schema", schema); } else { return; } var dt = new DataTable(); dataAdapter.Fill(dt); _cnx.Close(); // Mostrar el contenido del procedimiento txtProc.Text = String.Empty; foreach (DataRow dr in dt.Rows) { txtProc.Text += ((string)dr[0]).Replace("\r", "").Replace("\n", "\r\n"); } } #endregion } }