diff --git a/ServerExplorer/Code/Utiles.cs b/ServerExplorer/Code/Utiles.cs index 8ac8d96..de5e1e4 100644 --- a/ServerExplorer/Code/Utiles.cs +++ b/ServerExplorer/Code/Utiles.cs @@ -108,7 +108,7 @@ namespace ServerExplorer.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())); } diff --git a/ServerExplorer/UI/FrmBaseDatos.Designer.cs b/ServerExplorer/UI/FrmBaseDatos.Designer.cs index a6d4718..06a7a3b 100644 --- a/ServerExplorer/UI/FrmBaseDatos.Designer.cs +++ b/ServerExplorer/UI/FrmBaseDatos.Designer.cs @@ -48,6 +48,7 @@ this.colEsquema = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.colNombreTabla = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.colTipo = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.btnExportData = new System.Windows.Forms.Button(); this.lsvColumnas = new ServerExplorer.Controls.CustomListView(); this.colNombreColumna = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.colTipoDatos = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); @@ -107,14 +108,14 @@ // menuCargar // this.menuCargar.Name = "menuCargar"; - this.menuCargar.Size = new System.Drawing.Size(152, 22); + this.menuCargar.Size = new System.Drawing.Size(116, 22); this.menuCargar.Text = "Cargar"; this.menuCargar.Click += new System.EventHandler(this.menuCargar_Click); // // menuGuardar // this.menuGuardar.Name = "menuGuardar"; - this.menuGuardar.Size = new System.Drawing.Size(152, 22); + this.menuGuardar.Size = new System.Drawing.Size(116, 22); this.menuGuardar.Text = "Guardar"; this.menuGuardar.Click += new System.EventHandler(this.menuGuardar_Click); // @@ -224,10 +225,10 @@ this.splitContainer1.Panel1.Controls.Add(this.btnExec); this.splitContainer1.Panel1.Controls.Add(this.lsvTablas); this.splitContainer1.Panel1.Controls.Add(this.btnProcs); - this.splitContainer1.Panel1.Paint += new System.Windows.Forms.PaintEventHandler(this.splitContainer1_Panel1_Paint); // // splitContainer1.Panel2 // + this.splitContainer1.Panel2.Controls.Add(this.btnExportData); this.splitContainer1.Panel2.Controls.Add(this.lblTituloTabla); this.splitContainer1.Panel2.Controls.Add(this.btnDocGen); this.splitContainer1.Panel2.Controls.Add(this.lsvColumnas); @@ -283,6 +284,16 @@ this.colTipo.Text = "Tipo"; this.colTipo.Width = 71; // + // btnExportData + // + this.btnExportData.Location = new System.Drawing.Point(84, 485); + this.btnExportData.Name = "btnExportData"; + this.btnExportData.Size = new System.Drawing.Size(75, 23); + this.btnExportData.TabIndex = 15; + this.btnExportData.Text = "ExportData"; + this.btnExportData.UseVisualStyleBackColor = true; + this.btnExportData.Click += new System.EventHandler(this.btnExportData_Click); + // // lsvColumnas // this.lsvColumnas.AllowSorting = false; @@ -345,8 +356,8 @@ this.Controls.Add(this.splitContainer1); this.Controls.Add(this.btnCopiarConString); this.Controls.Add(this.lblConString); - this.Controls.Add(this.menuBaseDatos); this.Controls.Add(this.txtConString); + this.Controls.Add(this.menuBaseDatos); this.MainMenuStrip = this.menuBaseDatos; this.Name = "FrmBaseDatos"; this.Text = "Base de Datos"; @@ -390,5 +401,6 @@ private System.Windows.Forms.SplitContainer splitContainer1; private System.Windows.Forms.ColumnHeader colNullable; private System.Windows.Forms.Button btnRefresh; + private System.Windows.Forms.Button btnExportData; } } \ No newline at end of file diff --git a/ServerExplorer/UI/FrmBaseDatos.cs b/ServerExplorer/UI/FrmBaseDatos.cs index 6ed56cc..94a940b 100644 --- a/ServerExplorer/UI/FrmBaseDatos.cs +++ b/ServerExplorer/UI/FrmBaseDatos.cs @@ -7,6 +7,7 @@ using ServerExplorer.Code; using System.Collections.Generic; using ServerExplorer.Code.DataTransfer; using ServerExplorer.Code.DataAccess; +using System.IO; namespace ServerExplorer.UI { @@ -271,14 +272,92 @@ namespace ServerExplorer.UI Enabled = true; } - private void splitContainer1_Panel1_Paint(object sender, PaintEventArgs e) - { - - } - private void btnRefresh_Click(object sender, EventArgs e) { Initialize(); } + + private void btnExportData_Click(object sender, EventArgs e) + { + // Hacer insensible la ventana + Parent.Enabled = false; + + // Obtener informacion. + TablesFromListView(); + DatabaseDesc db = CrearDatabaseDesc(); + + // Preparar cabecera del script + var listCmds = new List(); + listCmds.Add("SET NOCOUNT ON;"); + listCmds.Add(string.Empty); + + // Comandos de desactivacion de FKs + foreach (TablaDesc t in db.Tablas) + { + string tableName = string.Format("{0}.{1}", t.Esquema, t.Nombre); + listCmds.Add(string.Format("ALTER TABLE {0} NOCHECK CONSTRAINT all;", tableName)); + } + listCmds.Add(string.Empty); + + // Prepara informacion a exportar + foreach (TablaDesc t in db.Tablas) + { + string tableName = string.Format("{0}.{1}", t.Esquema, t.Nombre); + List listCmdsTableData = ExportData(tableName); + listCmds.AddRange(listCmdsTableData); + } + + // Comandos de activacion de FKs + foreach (TablaDesc t in db.Tablas) + { + string tableName = string.Format("{0}.{1}", t.Esquema, t.Nombre); + listCmds.Add(string.Format("ALTER TABLE {0} WITH CHECK CHECK CONSTRAINT all;", tableName)); + } + listCmds.Add(string.Empty); + + // Escribir script + string fixedDatabaseName = db.Nombre.Replace(' ', '_'); + var escritor = new StreamWriter(fixedDatabaseName + ".data.sql"); + foreach (string cmd in listCmds) + { + escritor.WriteLine(cmd); + } + escritor.Close(); + + // Hace sensible la ventana + 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(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; + } + } }