Files
VAR.DatabaseExplorer/ServerExplorer/UI/FrmBaseDatos.cs

334 lines
10 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Xml.Serialization;
using System.Threading;
using ServerExplorer.Code;
namespace ServerExplorer.UI
{
public partial class FrmBaseDatos : Form
{
private FrmBaseDatos instancia;
private SqlConnection cnx;
private Config config;
private String tableSchema = null;
private String tableName = null;
private void Initialize()
{
// Establecer conexion
txtConString.Text = config.ConnectionString;
cnx = new SqlConnection(config.ConnectionString);
// Obtener lista de tablas
cnx.Open();
DataTable dt = cnx.GetSchema("Tables");
cnx.Close();
// Mostrar todas las tablas
lsvTablas.Items.Clear();
foreach (DataRow dr in dt.Rows)
{
ListViewItem item = lsvTablas.Items.Add((String)dr["TABLE_NAME"]);
item.SubItems.Add((String)dr["TABLE_SCHEMA"]);
item.SubItems.Add((String)dr["TABLE_TYPE"]);
}
TablesToListView();
// Limpiar Columnas
lsvColumnas.Items.Clear();
}
/// <summary>
/// Metodo para copiar las tablas seleccionadas en el listview a la configuracion
/// </summary>
private void TablesFromListView()
{
config.Tablas.Clear();
foreach (ListViewItem item in lsvTablas.Items)
{
if (item.Checked)
{
config.Tablas.Add(new TablaInfo
{
Esquema = item.SubItems[1].Text,
Nombre = item.SubItems[0].Text
});
}
}
}
/// <summary>
/// Metodo para seleccionar las tablas en le listview desde la configuracion
/// </summary>
private void TablesToListView()
{
int i, j, n;
// Desmarcar todos en caso de no haber ninguna tabla
if (config.Tablas.Count == 0)
{
foreach (ListViewItem item in lsvTablas.Items)
item.Checked = false;
return;
}
// Recorrer items marcando los que estan en la configuracion
n = config.Tablas.Count;
i = j = 0;
foreach (ListViewItem item in lsvTablas.Items)
{
item.Checked = false;
String tablename =
item.SubItems[1].Text + // Esquema
item.SubItems[0].Text; // Nombre tabla
do
{
if (config.Tablas[i].Esquema.
CompareTo(item.SubItems[1].Text) == 0 &&
config.Tablas[i].Nombre.
CompareTo(item.SubItems[0].Text) == 0)
{
item.Checked = true;
break;
}
i = (i + 1) % n;
} while (i != j);
j = i;
}
}
public DatabaseDesc CrearDatabaseDesc()
{
DatabaseDesc db = new DatabaseDesc { Nombre = cnx.Database };
foreach (TablaInfo t in config.Tablas)
{
TablaDesc td = new TablaDesc();
td.FillDesc(t.Esquema, t.Nombre, cnx);
db.Tablas.Add(td);
}
return (db);
}
public FrmBaseDatos(String ConnectionString)
{
InitializeComponent();
instancia = this;
config = new Config();
config.ConnectionString = ConnectionString;
}
public FrmBaseDatos(Config config)
{
InitializeComponent();
instancia = this;
this.config = config;
}
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
System.Windows.Forms.Clipboard.SetText(txtConString.Text);
}
private void lsvTablas_SelectedIndexChanged(object sender, EventArgs e)
{
if (lsvTablas.SelectedItems.Count == 1)
{
// Determinar tabla seleccionada
ListViewItem item = lsvTablas.SelectedItems[0];
// Recordar tabla seleccionada
tableSchema = item.SubItems[1].Text.ToString();
tableName = item.SubItems[0].Text.ToString();
// Establecer titulo de la lista de columnas
lblTituloTabla.Text = tableSchema + "." + tableName;
// Obtener descripcion de tabla
TablaDesc td = new TablaDesc();
td.FillDesc(item.SubItems[1].Text, item.SubItems[0].Text, cnx);
// Mostrar "columnas" de las tablas
lsvColumnas.Items.Clear();
foreach (ColumnaDesc col in td.Columnas)
{
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);
subitem.SubItems.Add(col.Nullable ? "Null" : "NotNull");
}
}
}
private void menuCargar_Click(object sender, EventArgs e)
{
OpenFileDialog dialogo = new OpenFileDialog();
if (dialogo.ShowDialog() == DialogResult.OK)
{
config = Config.Cargar(dialogo.FileName);
Initialize();
}
}
private void menuGuardar_Click(object sender, EventArgs e)
{
SaveFileDialog dialogo = new SaveFileDialog();
if (dialogo.ShowDialog() == DialogResult.OK)
{
TablesFromListView();
config.Guardar(dialogo.FileName);
}
}
private void menuConfiguracion_Click(object sender, EventArgs e)
{
//// Llamar a la ventana de configuracion
//FrmCodeGenConfig frm = new FrmCodeGenConfig(config);
//frm.ShowDialog();
}
private void btnVerDatos_Click(object sender, EventArgs e)
{
String nombreTabla;
DataTable dt;
SqlDataAdapter da;
if (tableSchema == null || tableName == null) { return; }
nombreTabla = "[" + tableSchema + "].[" + tableName + "]";
// Obtener un datatable con todos los registros de la tabla.
da = new SqlDataAdapter(
"select * from " + nombreTabla,
cnx);
dt = new DataTable();
cnx.Open();
da.Fill(dt);
cnx.Close();
// Crear y mostrar el formulario de los datos.
FrmDatos form = new FrmDatos(dt, nombreTabla);
form.MdiParent = this.MdiParent;
form.Show();
}
private void btnProcs_Click(object sender, EventArgs e)
{
/*DataTable dt;
SqlDataAdapter da;
// Obtener un datatable con todos los registros de la tabla.
da = new SqlDataAdapter(
"SELECT id,name,crdate FROM sysobjects WHERE type = 'P' AND category = 0 ORDER BY name ",
cnx);
dt = new DataTable();
cnx.Open();
da.Fill(dt);
cnx.Close();
// Crear y mostrar el formulario de los datos.
frmDatos form = new frmDatos(dt, "Procedimientos");
form.MdiParent = this.MdiParent;
form.Show();*/
// Crear y mostrar el formulario de los procedimientos.
FrmProcedimientos form = new FrmProcedimientos(config.ConnectionString);
form.MdiParent = this.MdiParent;
form.Show();
}
private void btnExec_Click(object sender, EventArgs e)
{
// Crear y mostrar el formulario de exec.
FrmExec form = new FrmExec(config.ConnectionString);
form.MdiParent = this.MdiParent;
form.Show();
}
private void menuBaseDatos_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
}
private void btnGenerar_Click(object sender, EventArgs e)
{
TablesFromListView();
DatabaseDesc db = CrearDatabaseDesc();
XmlSerializer seriador = new XmlSerializer(typeof(DatabaseDesc));
seriador.Serialize(System.Console.Out, db);
//CodeGen.GenerarCodigo(config, db);
}
private void btnDocGen_Click(object sender, EventArgs e)
{
// Hacer insensible la ventana
this.Parent.Enabled = false;
// Obtener informacion.
TablesFromListView();
DatabaseDesc db = CrearDatabaseDesc();
// Escribir documentacion
DocGen.GenerarDocumentacion(db);
// Hace sensible la ventana
this.Parent.Enabled = true;
/*
tablas_delistview();
Thread hilo=new Thread(new ThreadStart(instancia.GenerarDoc));
hilo.Start();
*/
}
public void GenerarDoc()
{
// Hacer insensible la ventana
this.Enabled = false;
// Obtener informacion.
DatabaseDesc db = CrearDatabaseDesc();
// Escribir documentacion
DocGen.GenerarDocumentacion(db);
// Hace sensible la ventana
this.Enabled = true;
}
private void splitContainer1_Panel1_Paint(object sender, PaintEventArgs e)
{
}
}
}