From 5a36c58b7642ef0e6d37c5fb07f7fae8c19e1765 Mon Sep 17 00:00:00 2001 From: "Valeriano A.R" Date: Sun, 4 Mar 2018 13:24:07 +0100 Subject: [PATCH] Create new BL and DA objects to abstract data acquisition and processing. --- .../Code/BusinessLogic/DatabaseBL.cs | 12 +++ .../DocumentationGeneratorBL.cs} | 6 +- .../Code/BusinessLogic/TableBL.cs | 28 ++++++ .../Code/DataAccess/ColumnDA.cs | 79 ++++++++++++++++ .../Code/DataAccess/DatabaseDA.cs | 4 +- .../Code/DataAccess/ProcedureDA.cs | 84 +++++++++++++++++ .../Code/DataAccess/ServerDA.cs | 8 +- .../Code/DataAccess/TableDA.cs | 22 +++-- .../Code/{Utiles.cs => DataTableHelper.cs} | 33 +------ .../Code/DataTransfer/Column.cs | 6 ++ .../Code/DataTransfer/Database.cs | 10 +-- .../Code/DataTransfer/Procedure.cs | 24 +++++ .../Code/DataTransfer/Server.cs | 19 ++-- .../Code/DataTransfer/Table.cs | 9 +- VAR.DatabaseExplorer/Code/TablaDesc.cs | 28 +++--- .../UI/FrmBaseDatos.Designer.cs | 7 -- VAR.DatabaseExplorer/UI/FrmBaseDatos.cs | 90 +++++-------------- VAR.DatabaseExplorer/UI/FrmExec.cs | 2 +- VAR.DatabaseExplorer/UI/FrmProcedimientos.cs | 75 ++++------------ VAR.DatabaseExplorer/UI/FrmServidores.cs | 4 +- .../VAR.DatabaseExplorer.csproj | 13 +-- 21 files changed, 339 insertions(+), 224 deletions(-) create mode 100644 VAR.DatabaseExplorer/Code/BusinessLogic/DatabaseBL.cs rename VAR.DatabaseExplorer/Code/{DocGen.cs => BusinessLogic/DocumentationGeneratorBL.cs} (90%) create mode 100644 VAR.DatabaseExplorer/Code/BusinessLogic/TableBL.cs create mode 100644 VAR.DatabaseExplorer/Code/DataAccess/ColumnDA.cs create mode 100644 VAR.DatabaseExplorer/Code/DataAccess/ProcedureDA.cs rename VAR.DatabaseExplorer/Code/{Utiles.cs => DataTableHelper.cs} (82%) create mode 100644 VAR.DatabaseExplorer/Code/DataTransfer/Procedure.cs diff --git a/VAR.DatabaseExplorer/Code/BusinessLogic/DatabaseBL.cs b/VAR.DatabaseExplorer/Code/BusinessLogic/DatabaseBL.cs new file mode 100644 index 0000000..5209e2c --- /dev/null +++ b/VAR.DatabaseExplorer/Code/BusinessLogic/DatabaseBL.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace VAR.DatabaseExplorer.Code.BusinessLogic +{ + public class DatabaseBL + { + } +} diff --git a/VAR.DatabaseExplorer/Code/DocGen.cs b/VAR.DatabaseExplorer/Code/BusinessLogic/DocumentationGeneratorBL.cs similarity index 90% rename from VAR.DatabaseExplorer/Code/DocGen.cs rename to VAR.DatabaseExplorer/Code/BusinessLogic/DocumentationGeneratorBL.cs index e2dff75..17120cb 100644 --- a/VAR.DatabaseExplorer/Code/DocGen.cs +++ b/VAR.DatabaseExplorer/Code/BusinessLogic/DocumentationGeneratorBL.cs @@ -1,10 +1,10 @@ using System.IO; -namespace VAR.DatabaseExplorer.Code +namespace VAR.DatabaseExplorer.Code.BusinessLogic { - public class DocGen + public class DocumentationGeneratorBL { - public static void GenerarDocumentacion(DatabaseDesc database) + public static void GenerateDocumentation(DatabaseDesc database) { // Abrir el documento que contendra la documentacion string fixedDatabaseName = database.Nombre.Replace(' ', '_'); diff --git a/VAR.DatabaseExplorer/Code/BusinessLogic/TableBL.cs b/VAR.DatabaseExplorer/Code/BusinessLogic/TableBL.cs new file mode 100644 index 0000000..c4014d6 --- /dev/null +++ b/VAR.DatabaseExplorer/Code/BusinessLogic/TableBL.cs @@ -0,0 +1,28 @@ +using System.Collections.Generic; +using System.Data; +using VAR.DatabaseExplorer.Code.DataAccess; + +namespace VAR.DatabaseExplorer.Code.BusinessLogic +{ + public class TableBL + { + public static List ExportData(string conectionString, string tableName) + { + DataTable dtData = TableDA.GetData(conectionString, tableName); + + var listCmds = new List(); + List listCmdsInsert = DataTableHelper.DataTable_GenerateInserts(dtData, tableName); + + listCmds.Add(string.Format("-- {0}", tableName)); + listCmds.Add(string.Format("DELETE FROM {0};", tableName)); + listCmds.Add(string.Format("DBCC CHECKIDENT ('{0}', RESEED, 0);", tableName)); + listCmds.Add(string.Format("SET IDENTITY_INSERT {0} ON;", tableName)); + listCmds.AddRange(listCmdsInsert); + listCmds.Add(string.Format("SET IDENTITY_INSERT {0} OFF;", tableName)); + listCmds.Add("GO"); + listCmds.Add(string.Empty); + + return listCmds; + } + } +} diff --git a/VAR.DatabaseExplorer/Code/DataAccess/ColumnDA.cs b/VAR.DatabaseExplorer/Code/DataAccess/ColumnDA.cs new file mode 100644 index 0000000..e4c8a19 --- /dev/null +++ b/VAR.DatabaseExplorer/Code/DataAccess/ColumnDA.cs @@ -0,0 +1,79 @@ +using System; +using System.Collections.Generic; +using System.Data; +using System.Data.SqlClient; +using System.Linq; +using VAR.DatabaseExplorer.Code.DataTransfer; + +namespace VAR.DatabaseExplorer.Code.DataAccess +{ + public class ColumnDA + { + public static List GetColumns(string conexionString, string tableSchema, string tableName) + { + var columns = new List(); + var cnx = new SqlConnection(conexionString); + + // Preparar comando y parametros + var da = new SqlDataAdapter(@" + SELECT col.COLUMN_NAME AS ColumnName, + col.DATA_TYPE AS Type, + col.CHARACTER_MAXIMUM_LENGTH AS Size, + c.CONSTRAINT_TYPE AS KeyType, + col.IS_NULLABLE AS Nullable + FROM INFORMATION_SCHEMA.COLUMNS AS col + LEFT JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS k + ON col.COLUMN_NAME=k.COLUMN_NAME AND + col.TABLE_NAME=k.TABLE_NAME AND + col.TABLE_SCHEMA=k.TABLE_SCHEMA + LEFT JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS c + ON k.CONSTRAINT_NAME=c.CONSTRAINT_NAME + WHERE col.TABLE_NAME=@TableName AND + col.TABLE_SCHEMA=@TableSchema + ORDER BY col.ORDINAL_POSITION + ", cnx); + var prm = new SqlParameter("@TableName", SqlDbType.VarChar, 100) { Value = tableName }; + da.SelectCommand.Parameters.Add(prm); + prm = new SqlParameter("@TableSchema", SqlDbType.VarChar, 100) { Value = tableSchema }; + da.SelectCommand.Parameters.Add(prm); + + // Obtener datatable con las columnas + var dt = new DataTable(); + cnx.Open(); + da.Fill(dt); + cnx.Close(); + + // Recorrer datatable estableciendo la lista de columnas + foreach (DataRow dr in dt.Rows) + { + string columnName = Convert.ToString(dr["ColumnName"]); + Column col = columns.FirstOrDefault(c => c.Name == columnName); + if(col == null) + { + col = new Column(); + columns.Add(col); + } + + col.Name = columnName; + + col.Type = Convert.ToString(dr["Type"]); + + if ((dr["Size"] is DBNull) == false) + { + col.Size = Convert.ToInt32(dr["Size"]); + } + + string strNullable = (Convert.ToString(dr["Nullable"])).ToLower(); + col.Nullable = (strNullable == "yes") || (strNullable == "1") || (strNullable == "true"); + + string KeyType = Convert.ToString(dr["KeyType"]).ToLower(); + if (KeyType.Contains("primary")) + { + col.PK = true; + } + } + + return columns; + } + } +} diff --git a/VAR.DatabaseExplorer/Code/DataAccess/DatabaseDA.cs b/VAR.DatabaseExplorer/Code/DataAccess/DatabaseDA.cs index 0e23ad2..5718bb3 100644 --- a/VAR.DatabaseExplorer/Code/DataAccess/DatabaseDA.cs +++ b/VAR.DatabaseExplorer/Code/DataAccess/DatabaseDA.cs @@ -8,7 +8,7 @@ namespace VAR.DatabaseExplorer.Code.DataAccess { public class DatabaseDA { - public static List Database_GetRegs(string conexionString) + public static List GetAllDatabases(string conexionString) { var databases = new List(); var cnx = new SqlConnection(conexionString); @@ -23,7 +23,7 @@ namespace VAR.DatabaseExplorer.Code.DataAccess { databases.Add(new Database { - Name = (String) dr["database_name"], + Name = (string) dr["database_name"], CreateDate = (DateTime) dr["create_date"] }); } diff --git a/VAR.DatabaseExplorer/Code/DataAccess/ProcedureDA.cs b/VAR.DatabaseExplorer/Code/DataAccess/ProcedureDA.cs new file mode 100644 index 0000000..69fe1b5 --- /dev/null +++ b/VAR.DatabaseExplorer/Code/DataAccess/ProcedureDA.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections.Generic; +using System.Data; +using System.Data.SqlClient; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using VAR.DatabaseExplorer.Code.DataTransfer; + +namespace VAR.DatabaseExplorer.Code.DataAccess +{ + public class ProcedureDA + { + public static List GetAllProcedures(string conexionString) + { + var procedures = new List(); + var cnx = new SqlConnection(conexionString); + + 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(); + + foreach (DataRow dr in dt.Rows) + { + procedures.Add(new Procedure + { + Schema = Convert.ToString(dr["Schema"]), + Name = Convert.ToString(dr["Name"]), + Type = Convert.ToString(dr["Type"]), + CreateDate = Convert.ToDateTime(dr["CreateDate"]), + }); + } + return procedures; + } + + public static string GetProcedureDefinition(string conexionString, string schema, string name) + { + SqlDataAdapter dataAdapter; + var cnx = new SqlConnection(conexionString); + cnx.Open(); + + if (cnx.ServerVersion.StartsWith("10.") || cnx.ServerVersion.StartsWith("11.")) + { + 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 + { + cnx.Close(); + return null; + } + + var dt = new DataTable(); + dataAdapter.Fill(dt); + cnx.Close(); + + var sbProc = new StringBuilder(); + foreach (DataRow dr in dt.Rows) + { + string strProcBlock = Convert.ToString(dr["Definition"]); + strProcBlock = strProcBlock.Replace("\r", "").Replace("\n", "\r\n"); + sbProc.Append(strProcBlock); + } + + return sbProc.ToString(); + } + } +} diff --git a/VAR.DatabaseExplorer/Code/DataAccess/ServerDA.cs b/VAR.DatabaseExplorer/Code/DataAccess/ServerDA.cs index 9a3e995..1512679 100644 --- a/VAR.DatabaseExplorer/Code/DataAccess/ServerDA.cs +++ b/VAR.DatabaseExplorer/Code/DataAccess/ServerDA.cs @@ -8,7 +8,7 @@ namespace VAR.DatabaseExplorer.Code.DataAccess { public class ServerDA { - public static List Server_GetRegs() + public static List GetAllServers() { var servers = new List(); SqlDataSourceEnumerator enumerador = SqlDataSourceEnumerator.Instance; @@ -21,9 +21,9 @@ namespace VAR.DatabaseExplorer.Code.DataAccess { servers.Add(new Server { - Name = (dr["ServerName"] == DBNull.Value) ? string.Empty : (String)dr["ServerName"], - Instance = (dr["InstanceName"] == DBNull.Value) ? string.Empty : (String)dr["InstanceName"], - Version = (dr["Version"] == DBNull.Value) ? "???" : (String)dr["Version"] + Name = (dr["ServerName"] == DBNull.Value) ? string.Empty : (string)dr["ServerName"], + Instance = (dr["InstanceName"] == DBNull.Value) ? string.Empty : (string)dr["InstanceName"], + Version = (dr["Version"] == DBNull.Value) ? "???" : (string)dr["Version"] }); } return servers; diff --git a/VAR.DatabaseExplorer/Code/DataAccess/TableDA.cs b/VAR.DatabaseExplorer/Code/DataAccess/TableDA.cs index 184a4b3..6e66bb6 100644 --- a/VAR.DatabaseExplorer/Code/DataAccess/TableDA.cs +++ b/VAR.DatabaseExplorer/Code/DataAccess/TableDA.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using VAR.DatabaseExplorer.Code.DataTransfer; @@ -8,7 +7,7 @@ namespace VAR.DatabaseExplorer.Code.DataAccess { public class TableDA { - public static List Table_GetRegs(string conexionString) + public static List
GetAllTables(string conexionString) { var tables = new List
(); var cnx = new SqlConnection(conexionString); @@ -18,8 +17,7 @@ namespace VAR.DatabaseExplorer.Code.DataAccess cnx.Close(); dt.DefaultView.Sort = "TABLE_SCHEMA ASC, TABLE_NAME ASC, TABLE_TYPE ASC"; dt = dt.DefaultView.ToTable(); - - // Mostrar todas las tablas + foreach (DataRow dr in dt.Rows) { tables.Add(new Table @@ -32,5 +30,19 @@ namespace VAR.DatabaseExplorer.Code.DataAccess return tables; } + + public static DataTable GetData(string conexionString, string tableName) + { + var cnx = new SqlConnection(conexionString); + string strCmd = string.Format("SELECT * FROM {0}", tableName); + var da = new SqlDataAdapter(strCmd, cnx); + var dt = new DataTable(); + cnx.Open(); + da.Fill(dt); + cnx.Close(); + + return dt; + } + } } diff --git a/VAR.DatabaseExplorer/Code/Utiles.cs b/VAR.DatabaseExplorer/Code/DataTableHelper.cs similarity index 82% rename from VAR.DatabaseExplorer/Code/Utiles.cs rename to VAR.DatabaseExplorer/Code/DataTableHelper.cs index ab25246..5099a87 100644 --- a/VAR.DatabaseExplorer/Code/Utiles.cs +++ b/VAR.DatabaseExplorer/Code/DataTableHelper.cs @@ -2,39 +2,12 @@ using System.Collections.Generic; using System.Data; using System.Globalization; -using System.IO; using System.Text; namespace VAR.DatabaseExplorer.Code { - public static class Utiles + public static class DataTableHelper { - #region File Utils - - public static void CrearDirectorio(this String path) - { - DirectoryInfo info; - try - { - info = new DirectoryInfo(path); - } - catch (Exception) - { - info = new DirectoryInfo("."); - } - CrearDirectorio(info); - } - - public static void CrearDirectorio(this DirectoryInfo info) - { - if (info.Parent != null) CrearDirectorio(info.Parent); - if (!info.Exists) info.Create(); - } - - #endregion - - #region DataTable Utils - public static List DataTable_GenerateInserts(DataTable dataTable, string destTable) { var nfi = new NumberFormatInfo { NumberDecimalSeparator = "." }; @@ -108,13 +81,11 @@ namespace VAR.DatabaseExplorer.Code } // Insertar fila a la datatable destino - listCmds.Add(String.Format("INSERT INTO {0} ({1}) VALUES ({2});", + listCmds.Add(string.Format("INSERT INTO {0} ({1}) VALUES ({2});", destTable, sbColumns.ToString(), sbValues.ToString())); } return listCmds; } - - #endregion } } diff --git a/VAR.DatabaseExplorer/Code/DataTransfer/Column.cs b/VAR.DatabaseExplorer/Code/DataTransfer/Column.cs index 6c5b261..f9c77f4 100644 --- a/VAR.DatabaseExplorer/Code/DataTransfer/Column.cs +++ b/VAR.DatabaseExplorer/Code/DataTransfer/Column.cs @@ -9,10 +9,16 @@ namespace VAR.DatabaseExplorer.Code.DataTransfer { [XmlAttribute] public string Name { get; set; } + [XmlAttribute] public string Type { get; set; } + [XmlAttribute] public int Size { get; set; } + + [XmlAttribute] + public bool Nullable { get; set; } + [XmlAttribute] public bool PK { get; set; } } diff --git a/VAR.DatabaseExplorer/Code/DataTransfer/Database.cs b/VAR.DatabaseExplorer/Code/DataTransfer/Database.cs index c7d1f09..41eb411 100644 --- a/VAR.DatabaseExplorer/Code/DataTransfer/Database.cs +++ b/VAR.DatabaseExplorer/Code/DataTransfer/Database.cs @@ -10,16 +10,14 @@ namespace VAR.DatabaseExplorer.Code.DataTransfer { [XmlAttribute] public string Name { get; set; } + [XmlAttribute] public DateTime CreateDate { get; set; } - - private readonly List
_tables = new List
(); + [XmlArray] + public List
Tables { get; set; } [XmlArray] - public List
Tables - { - get { return _tables; } - } + public List Procedures { get; set; } } } diff --git a/VAR.DatabaseExplorer/Code/DataTransfer/Procedure.cs b/VAR.DatabaseExplorer/Code/DataTransfer/Procedure.cs new file mode 100644 index 0000000..3271e93 --- /dev/null +++ b/VAR.DatabaseExplorer/Code/DataTransfer/Procedure.cs @@ -0,0 +1,24 @@ +using System; +using System.Xml.Serialization; + +namespace VAR.DatabaseExplorer.Code.DataTransfer +{ + [Serializable] + public class Procedure + { + [XmlAttribute] + public string Schema { get; set; } + + [XmlAttribute] + public string Name { get; set; } + + [XmlAttribute] + public string Type { get; set; } + + [XmlAttribute] + public DateTime CreateDate { get; set; } + + [XmlElement] + public string Definition { get; set; } + } +} diff --git a/VAR.DatabaseExplorer/Code/DataTransfer/Server.cs b/VAR.DatabaseExplorer/Code/DataTransfer/Server.cs index 716526f..8f6613e 100644 --- a/VAR.DatabaseExplorer/Code/DataTransfer/Server.cs +++ b/VAR.DatabaseExplorer/Code/DataTransfer/Server.cs @@ -9,26 +9,17 @@ namespace VAR.DatabaseExplorer.Code.DataTransfer { [XmlAttribute] public string Name { get; set; } + [XmlAttribute] public string Instance { get; set; } + [XmlAttribute] public string Version { get; set; } - - private readonly List _users = new List(); + [XmlArray] + public List Users { get; set; } [XmlArray] - public List Users - { - get { return _users; } - } - - private readonly List _databases = new List(); - - [XmlArray] - public List Databases - { - get { return _databases; } - } + public List Databases { get; set; } } } diff --git a/VAR.DatabaseExplorer/Code/DataTransfer/Table.cs b/VAR.DatabaseExplorer/Code/DataTransfer/Table.cs index 19bda49..1ca76b3 100644 --- a/VAR.DatabaseExplorer/Code/DataTransfer/Table.cs +++ b/VAR.DatabaseExplorer/Code/DataTransfer/Table.cs @@ -10,17 +10,14 @@ namespace VAR.DatabaseExplorer.Code.DataTransfer { [XmlAttribute] public string Schema { get; set; } + [XmlAttribute] public string Name { get; set; } + [XmlAttribute] public string Type { get; set; } - private readonly List _columns = new List(); - [XmlArray] - public List Columns - { - get { return _columns; } - } + public List Columns { get; set; } } } diff --git a/VAR.DatabaseExplorer/Code/TablaDesc.cs b/VAR.DatabaseExplorer/Code/TablaDesc.cs index a03ba5d..0f3c00b 100644 --- a/VAR.DatabaseExplorer/Code/TablaDesc.cs +++ b/VAR.DatabaseExplorer/Code/TablaDesc.cs @@ -62,21 +62,21 @@ namespace VAR.DatabaseExplorer.Code // Preparar comando y parametros var da = new SqlDataAdapter(@" - SELECT col.COLUMN_NAME AS Columna, - col.DATA_TYPE AS Tipo, - col.CHARACTER_MAXIMUM_LENGTH AS Tamanho, - c.CONSTRAINT_TYPE AS TipoClave, - col.IS_NULLABLE AS Nullable - FROM INFORMATION_SCHEMA.COLUMNS AS col - LEFT JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS k - ON col.COLUMN_NAME=k.COLUMN_NAME AND - col.TABLE_NAME=k.TABLE_NAME AND - col.TABLE_SCHEMA=k.TABLE_SCHEMA - LEFT JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS c - ON k.CONSTRAINT_NAME=c.CONSTRAINT_NAME - WHERE col.TABLE_NAME=@nombreTabla AND + SELECT col.COLUMN_NAME AS Columna, + col.DATA_TYPE AS Tipo, + col.CHARACTER_MAXIMUM_LENGTH AS Tamanho, + c.CONSTRAINT_TYPE AS TipoClave, + col.IS_NULLABLE AS Nullable + FROM INFORMATION_SCHEMA.COLUMNS AS col + LEFT JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS k + ON col.COLUMN_NAME=k.COLUMN_NAME AND + col.TABLE_NAME=k.TABLE_NAME AND + col.TABLE_SCHEMA=k.TABLE_SCHEMA + LEFT JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS c + ON k.CONSTRAINT_NAME=c.CONSTRAINT_NAME + WHERE col.TABLE_NAME=@nombreTabla AND col.TABLE_SCHEMA=@nombreEsquema - ORDER BY col.ORDINAL_POSITION + ORDER BY col.ORDINAL_POSITION ", cnx); var prm = new SqlParameter("@nombreTabla", SqlDbType.VarChar, 100) {Value = nombre}; da.SelectCommand.Parameters.Add(prm); diff --git a/VAR.DatabaseExplorer/UI/FrmBaseDatos.Designer.cs b/VAR.DatabaseExplorer/UI/FrmBaseDatos.Designer.cs index d8232c1..5b2db9e 100644 --- a/VAR.DatabaseExplorer/UI/FrmBaseDatos.Designer.cs +++ b/VAR.DatabaseExplorer/UI/FrmBaseDatos.Designer.cs @@ -52,7 +52,6 @@ this.lsvColumnas = new VAR.DatabaseExplorer.Controls.CustomListView(); this.colNombreColumna = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.colTipoDatos = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.colTamanho = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.colClave = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.colNullable = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.txtConString = new VAR.DatabaseExplorer.Controls.CustomTextBox(); @@ -304,7 +303,6 @@ this.lsvColumnas.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { this.colNombreColumna, this.colTipoDatos, - this.colTamanho, this.colClave, this.colNullable}); this.lsvColumnas.FullRowSelect = true; @@ -325,10 +323,6 @@ this.colTipoDatos.Text = "Tipo de Datos"; this.colTipoDatos.Width = 81; // - // colTamanho - // - this.colTamanho.Text = "Tamaño"; - // // colClave // this.colClave.Text = "Clave"; @@ -385,7 +379,6 @@ private VAR.DatabaseExplorer.Controls.CustomListView lsvColumnas; private System.Windows.Forms.ColumnHeader colNombreColumna; private System.Windows.Forms.ColumnHeader colTipoDatos; - private System.Windows.Forms.ColumnHeader colTamanho; private System.Windows.Forms.MenuStrip menuBaseDatos; private System.Windows.Forms.ToolStripMenuItem archivoToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem menuCargar; diff --git a/VAR.DatabaseExplorer/UI/FrmBaseDatos.cs b/VAR.DatabaseExplorer/UI/FrmBaseDatos.cs index a046443..01995af 100644 --- a/VAR.DatabaseExplorer/UI/FrmBaseDatos.cs +++ b/VAR.DatabaseExplorer/UI/FrmBaseDatos.cs @@ -1,13 +1,13 @@ using System; -using System.Data; -using System.Windows.Forms; +using System.Collections.Generic; using System.Data.SqlClient; +using System.IO; +using System.Windows.Forms; using System.Xml.Serialization; using VAR.DatabaseExplorer.Code; -using System.Collections.Generic; -using VAR.DatabaseExplorer.Code.DataTransfer; +using VAR.DatabaseExplorer.Code.BusinessLogic; using VAR.DatabaseExplorer.Code.DataAccess; -using System.IO; +using VAR.DatabaseExplorer.Code.DataTransfer; namespace VAR.DatabaseExplorer.UI { @@ -15,8 +15,8 @@ namespace VAR.DatabaseExplorer.UI { private SqlConnection _cnx; private Config _config; - private String _tableSchema; - private String _tableName; + private string _tableSchema; + private string _tableName; private void Initialize() { @@ -24,7 +24,7 @@ namespace VAR.DatabaseExplorer.UI txtConString.Text = _config.ConnectionString; _cnx = new SqlConnection(_config.ConnectionString); - List
tables = TableDA.Table_GetRegs(_config.ConnectionString); + List
tables = TableDA.GetAllTables(_config.ConnectionString); lsvTablas.Items.Clear(); foreach (Table table in tables) { @@ -79,8 +79,8 @@ namespace VAR.DatabaseExplorer.UI item.Checked = false; do { - if (String.Compare(_config.Tablas[i].Esquema, item.SubItems[0].Text, StringComparison.Ordinal) == 0 && - String.Compare(_config.Tablas[i].Nombre, item.SubItems[1].Text, StringComparison.Ordinal) == 0) + if (string.Compare(_config.Tablas[i].Esquema, item.SubItems[0].Text, StringComparison.Ordinal) == 0 && + string.Compare(_config.Tablas[i].Nombre, item.SubItems[1].Text, StringComparison.Ordinal) == 0) { item.Checked = true; break; @@ -121,44 +121,34 @@ namespace VAR.DatabaseExplorer.UI private void frmBaseDatos_Load(object sender, EventArgs e) { Initialize(); - - // Establecer titulos + lblTituloDB.Text = _cnx.Database; lblTituloTabla.Text = ""; } private void btnCopiarConString_Click(object sender, EventArgs e) { - // Copiar la cadena de conexion al portapapeles Clipboard.SetText(txtConString.Text); } private void lsvTablas_SelectedIndexChanged(object sender, EventArgs e) { if (lsvTablas.SelectedItems.Count != 1) { return; } - - // Determinar tabla seleccionada + ListViewItem item = lsvTablas.SelectedItems[0]; - - // Recordar tabla seleccionada _tableSchema = item.SubItems[0].Text; _tableName = item.SubItems[1].Text; - - // Establecer titulo de la lista de columnas + lblTituloTabla.Text = _tableSchema + @"." + _tableName; - - // Obtener descripcion de tabla - var td = new TablaDesc(); - td.FillDesc(_tableSchema, _tableName, _cnx); - - // Mostrar "columnas" de las tablas + + List columns = ColumnDA.GetColumns(_config.ConnectionString, _tableSchema, _tableName); lsvColumnas.Items.Clear(); - foreach (ColumnaDesc col in td.Columnas) + foreach (Column col in columns) { - ListViewItem subitem = lsvColumnas.Items.Add(col.Nombre); - subitem.SubItems.Add(col.Tipo); - subitem.SubItems.Add((col.Tamanho >= 0) ? String.Format("{0}", col.Tamanho) : string.Empty); - subitem.SubItems.Add(col.Primaria ? "PK" : string.Empty); + ListViewItem subitem = lsvColumnas.Items.Add(col.Name); + string type = string.Format("{0}{1}", col.Type, col.Size > 0 ? string.Format("({0})", col.Size) : string.Empty); + subitem.SubItems.Add(type); + subitem.SubItems.Add(col.PK ? "PK" : string.Empty); subitem.SubItems.Add(col.Nullable ? "Null" : "NotNull"); } } @@ -231,8 +221,6 @@ namespace VAR.DatabaseExplorer.UI var seriador = new XmlSerializer(typeof(DatabaseDesc)); seriador.Serialize(Console.Out, db); - - //CodeGen.GenerarCodigo(config, db); } private void btnDocGen_Click(object sender, EventArgs e) @@ -245,7 +233,7 @@ namespace VAR.DatabaseExplorer.UI DatabaseDesc db = CrearDatabaseDesc(); // Escribir documentacion - DocGen.GenerarDocumentacion(db); + DocumentationGeneratorBL.GenerateDocumentation(db); // Hace sensible la ventana Parent.Enabled = true; @@ -266,7 +254,7 @@ namespace VAR.DatabaseExplorer.UI DatabaseDesc db = CrearDatabaseDesc(); // Escribir documentacion - DocGen.GenerarDocumentacion(db); + DocumentationGeneratorBL.GenerateDocumentation(db); // Hace sensible la ventana Enabled = true; @@ -311,7 +299,7 @@ namespace VAR.DatabaseExplorer.UI { string tableName = string.Format("{0}.{1}", t.Esquema, t.Nombre); listCmds.Add(string.Format("PRINT '*** Importing data of {0}....';", tableName)); - List listCmdsTableData = ExportData(tableName); + List listCmdsTableData = TableBL.ExportData(_config.ConnectionString, tableName); listCmds.AddRange(listCmdsTableData); } @@ -343,37 +331,5 @@ namespace VAR.DatabaseExplorer.UI Parent.Enabled = true; } - private List ExportData(string tableName) - { - DataTable dtData = Exec(string.Format("SELECT * FROM {0}", tableName)); - - var listCmds = new List(); - List listCmdsInsert = Utiles.DataTable_GenerateInserts(dtData, tableName); - - listCmds.Add(string.Format("-- {0}", tableName)); - listCmds.Add(string.Format("DELETE FROM {0};", tableName)); - listCmds.Add(string.Format("DBCC CHECKIDENT ('{0}', RESEED, 0);", tableName)); - listCmds.Add(string.Format("SET IDENTITY_INSERT {0} ON;", tableName)); - listCmds.AddRange(listCmdsInsert); - listCmds.Add(string.Format("SET IDENTITY_INSERT {0} OFF;", tableName)); - listCmds.Add("GO"); - listCmds.Add(string.Empty); - - return listCmds; - } - - private DataTable Exec(string cmd) - { - var cnx = new SqlConnection(_config.ConnectionString); - - var da = new SqlDataAdapter(cmd, cnx); - var dt = new DataTable(); - cnx.Open(); - da.Fill(dt); - cnx.Close(); - - return dt; - } - } } diff --git a/VAR.DatabaseExplorer/UI/FrmExec.cs b/VAR.DatabaseExplorer/UI/FrmExec.cs index 98ed753..7eaf956 100644 --- a/VAR.DatabaseExplorer/UI/FrmExec.cs +++ b/VAR.DatabaseExplorer/UI/FrmExec.cs @@ -48,7 +48,7 @@ namespace VAR.DatabaseExplorer.UI { DataTable dataTable = Exec(); - List listCmds = Utiles.DataTable_GenerateInserts(dataTable, txtDestTable.Text); + List listCmds = DataTableHelper.DataTable_GenerateInserts(dataTable, txtDestTable.Text); // Preparar la datatable destino var destDataTable = new DataTable(); diff --git a/VAR.DatabaseExplorer/UI/FrmProcedimientos.cs b/VAR.DatabaseExplorer/UI/FrmProcedimientos.cs index 39e0b69..f388512 100644 --- a/VAR.DatabaseExplorer/UI/FrmProcedimientos.cs +++ b/VAR.DatabaseExplorer/UI/FrmProcedimientos.cs @@ -1,7 +1,10 @@ using System; +using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Windows.Forms; +using VAR.DatabaseExplorer.Code.DataAccess; +using VAR.DatabaseExplorer.Code.DataTransfer; namespace VAR.DatabaseExplorer.UI { @@ -9,6 +12,8 @@ namespace VAR.DatabaseExplorer.UI { #region Declarations + private string _connectionString; + private readonly SqlConnection _cnx; #endregion @@ -19,12 +24,13 @@ namespace VAR.DatabaseExplorer.UI { InitializeComponent(); + _connectionString = cnxString; _cnx = new SqlConnection(cnxString); } private void frmProcedimientos_Load(object sender, EventArgs e) { - LoadProcedures(); + lsvProcs_LoadData(); } #endregion @@ -37,76 +43,31 @@ namespace VAR.DatabaseExplorer.UI string name = lsvProcs.SelectedItems[0].SubItems[0].Text; string schema = lsvProcs.SelectedItems[0].SubItems[1].Text; - LoadProcedure(schema, name); + + string procDefinition = ProcedureDA.GetProcedureDefinition(_connectionString, schema, name); + txtProc.Text = procDefinition; } private void btnRefresh_Click(object sender, EventArgs e) { - LoadProcedures(); + lsvProcs_LoadData(); } #endregion #region Private methods - private void LoadProcedures() + private void lsvProcs_LoadData() { - // 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(); + List procs = ProcedureDA.GetAllProcedures(_connectionString); - // Mostrar todos los procedimientos lsvProcs.Items.Clear(); - foreach (DataRow dr in dt.Rows) + foreach (Procedure proc in procs) { - 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"); + ListViewItem item = lsvProcs.Items.Add(proc.Name); + item.SubItems.Add(proc.Schema); + item.SubItems.Add(proc.CreateDate.ToShortDateString()); + item.SubItems.Add(proc.Type); } } diff --git a/VAR.DatabaseExplorer/UI/FrmServidores.cs b/VAR.DatabaseExplorer/UI/FrmServidores.cs index e2bf958..58e083d 100644 --- a/VAR.DatabaseExplorer/UI/FrmServidores.cs +++ b/VAR.DatabaseExplorer/UI/FrmServidores.cs @@ -16,7 +16,7 @@ namespace VAR.DatabaseExplorer.UI private void btnListarServidores_Click(object sender, EventArgs e) { - List servers = ServerDA.Server_GetRegs(); + List servers = ServerDA.GetAllServers(); lsvServidores.Items.Clear(); lsvBBDD.Items.Clear(); @@ -41,7 +41,7 @@ namespace VAR.DatabaseExplorer.UI private void btnListarBBDD_Click(object sender, EventArgs e) { - List databases = DatabaseDA.Database_GetRegs(BuildConnectionString()); + List databases = DatabaseDA.GetAllDatabases(BuildConnectionString()); lsvBBDD.Items.Clear(); foreach (Database database in databases) diff --git a/VAR.DatabaseExplorer/VAR.DatabaseExplorer.csproj b/VAR.DatabaseExplorer/VAR.DatabaseExplorer.csproj index c6be119..dc57201 100644 --- a/VAR.DatabaseExplorer/VAR.DatabaseExplorer.csproj +++ b/VAR.DatabaseExplorer/VAR.DatabaseExplorer.csproj @@ -80,12 +80,17 @@ + + + + + @@ -93,7 +98,7 @@ Component - + Component @@ -139,7 +144,7 @@ - + FrmBaseDatos.cs @@ -176,9 +181,7 @@ true - - - +