diff --git a/VAR.DatabaseExplorer/Code/BusinessLogic/DatabaseBL.cs b/VAR.DatabaseExplorer/Code/BusinessLogic/DatabaseBL.cs
index 9a1e333..9f81952 100644
--- a/VAR.DatabaseExplorer/Code/BusinessLogic/DatabaseBL.cs
+++ b/VAR.DatabaseExplorer/Code/BusinessLogic/DatabaseBL.cs
@@ -12,11 +12,11 @@ namespace VAR.DatabaseExplorer.Code.BusinessLogic
return database;
}
- public static Database Database_GetSchema(string connectionString, bool fillDefinitions = false)
+ public static Database Database_GetSchema(string connectionString, bool fillTableDefinitions = false, bool fillProcDefinitions = false)
{
Database database = DatabaseDA.GetInfo(connectionString);
- database.Tables = TableBL.Table_GetAll(connectionString, fillDefinitions);
- database.Procedures = ProcedureBL.Procedure_GetAll(connectionString, fillDefinitions);
+ database.Tables = TableBL.Table_GetAll(connectionString, fillTableDefinitions);
+ database.Procedures = ProcedureBL.Procedure_GetAll(connectionString, fillProcDefinitions);
return database;
}
@@ -89,5 +89,73 @@ namespace VAR.DatabaseExplorer.Code.BusinessLogic
txtWriter.WriteLine("GO");
txtWriter.WriteLine(string.Empty);
}
+
+ public static void Database_ExportTables(TextWriter txtWriter, string connectionString, Database database)
+ {
+ foreach (Table t in database.Tables)
+ {
+ if (t.Type != "BASE TABLE") { continue; }
+
+ string tableName = string.Format("{0}.{1}", t.Schema, t.Name);
+ txtWriter.WriteLine(string.Format("PRINT '*** Creating tabla {0}....';", tableName));
+
+ txtWriter.WriteLine(string.Format("CREATE TABLE {0} (", tableName));
+ bool firstColumn = true;
+ foreach (Column c in t.Columns)
+ {
+ if (firstColumn == false)
+ {
+ txtWriter.WriteLine(",");
+ }
+ txtWriter.Write(" [");
+ txtWriter.Write(c.Name);
+ txtWriter.Write("] ");
+ if (
+ c.Type == "nvarchar" ||
+ c.Type == "varchar" ||
+ c.Type == "char" ||
+ c.Type == "nchar" ||
+ c.Type == "binary" ||
+ c.Type == "varbinary" ||
+ c.Type == "image")
+ {
+ if (c.Size < 0)
+ {
+ txtWriter.Write(string.Format("{0}(MAX)", c.Type));
+ }
+ else
+ {
+ txtWriter.Write(string.Format("{0}({1})", c.Type, c.Size));
+ }
+ }
+ else
+ {
+ txtWriter.Write(c.Type);
+ }
+ if (c.Nullable)
+ {
+ txtWriter.Write(" NULL");
+ }
+ else
+ {
+ txtWriter.Write(" NOT NULL");
+ }
+ if (c.PK)
+ {
+ txtWriter.Write(" PRIMARY KEY");
+ }
+ if (c.Indentity)
+ {
+ txtWriter.Write(" IDENTITY(1,1)");
+ }
+ firstColumn = false;
+
+ }
+ txtWriter.WriteLine();
+ txtWriter.WriteLine(string.Format(");"));
+ txtWriter.WriteLine("GO");
+ txtWriter.WriteLine();
+ }
+ }
}
}
\ No newline at end of file
diff --git a/VAR.DatabaseExplorer/Code/BusinessLogic/TableBL.cs b/VAR.DatabaseExplorer/Code/BusinessLogic/TableBL.cs
index f77a98b..96534cc 100644
--- a/VAR.DatabaseExplorer/Code/BusinessLogic/TableBL.cs
+++ b/VAR.DatabaseExplorer/Code/BusinessLogic/TableBL.cs
@@ -13,9 +13,10 @@ namespace VAR.DatabaseExplorer.Code.BusinessLogic
List
tables = TableDA.GetAllTables(connectionString);
if (fillColumns)
{
+ List allColumns = ColumnDA.GetColumns(connectionString, null, null);
foreach (Table table in tables)
{
- table.Columns = ColumnDA.GetColumns(connectionString, table.Schema, table.Name);
+ table.Columns = allColumns.Where(c => c.TableName == table.Name && c.TableSchema == table.Schema).ToList();
}
}
return tables;
diff --git a/VAR.DatabaseExplorer/Code/DataAccess/ColumnDA.cs b/VAR.DatabaseExplorer/Code/DataAccess/ColumnDA.cs
index 4313ba1..ff46ea2 100644
--- a/VAR.DatabaseExplorer/Code/DataAccess/ColumnDA.cs
+++ b/VAR.DatabaseExplorer/Code/DataAccess/ColumnDA.cs
@@ -2,7 +2,6 @@
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
-using System.Linq;
using VAR.DatabaseExplorer.Code.DataTransfer;
namespace VAR.DatabaseExplorer.Code.DataAccess
@@ -16,25 +15,39 @@ namespace VAR.DatabaseExplorer.Code.DataAccess
// 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
+ SELECT
+ col.TABLE_SCHEMA TableSchema,
+ col.TABLE_NAME TableName,
+ col.COLUMN_NAME AS ColumnName,
+ col.DATA_TYPE AS Type,
+ col.CHARACTER_MAXIMUM_LENGTH AS Size,
+ c.KeyType AS KeyType,
+ col.IS_NULLABLE AS Nullable,
+ CASE WHEN (COLUMNPROPERTY(object_id(col.TABLE_SCHEMA+'.'+col.TABLE_NAME), col.COLUMN_NAME, 'IsIdentity') = 1) THEN 1 ELSE 0 END IsIdentity,
+ NULL EmptyColumn
+ FROM INFORMATION_SCHEMA.COLUMNS AS col
+ LEFT JOIN (
+ SELECT
+ k.TABLE_SCHEMA TableSchema,
+ k.TABLE_NAME TableName,
+ k.COLUMN_NAME ColumnName,
+ c.CONSTRAINT_TYPE KeyType
+ FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS k
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 };
+ ON k.CONSTRAINT_NAME=c.CONSTRAINT_NAME AND
+ k.TABLE_NAME=c.TABLE_NAME AND
+ k.TABLE_SCHEMA=c.TABLE_SCHEMA
+ ) c ON col.COLUMN_NAME=c.ColumnName AND
+ col.TABLE_NAME=c.TableName AND
+ col.TABLE_SCHEMA=c.TableSchema AND
+ c.KeyType = 'PRIMARY KEY'
+ WHERE (@TableName IS NULL OR col.TABLE_NAME=@TableName) AND
+ (@TableSchema IS NULL OR col.TABLE_SCHEMA=@TableSchema)
+ ORDER BY col.TABLE_SCHEMA, col.TABLE_NAME, col.ORDINAL_POSITION
+ ", cnx);
+ var prm = new SqlParameter("@TableName", SqlDbType.VarChar, 100) { Value = (object)tableName ?? DBNull.Value };
da.SelectCommand.Parameters.Add(prm);
- prm = new SqlParameter("@TableSchema", SqlDbType.VarChar, 100) { Value = tableSchema };
+ prm = new SqlParameter("@TableSchema", SqlDbType.VarChar, 100) { Value = (object)tableSchema ?? DBNull.Value };
da.SelectCommand.Parameters.Add(prm);
// Obtener datatable con las columnas
@@ -46,15 +59,11 @@ namespace VAR.DatabaseExplorer.Code.DataAccess
// 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);
- }
+ Column col = new Column();
- col.Name = columnName;
+ col.TableSchema = Convert.ToString(dr["TableSchema"]);
+ col.TableName = Convert.ToString(dr["TableName"]);
+ col.Name = Convert.ToString(dr["ColumnName"]);
col.Type = Convert.ToString(dr["Type"]);
@@ -71,6 +80,9 @@ namespace VAR.DatabaseExplorer.Code.DataAccess
{
col.PK = true;
}
+ col.Indentity = Convert.ToBoolean(dr["IsIdentity"]);
+
+ columns.Add(col);
}
return columns;
diff --git a/VAR.DatabaseExplorer/Code/DataTransfer/Column.cs b/VAR.DatabaseExplorer/Code/DataTransfer/Column.cs
index 3e6c96f..3c8cae6 100644
--- a/VAR.DatabaseExplorer/Code/DataTransfer/Column.cs
+++ b/VAR.DatabaseExplorer/Code/DataTransfer/Column.cs
@@ -6,6 +6,12 @@ namespace VAR.DatabaseExplorer.Code.DataTransfer
[Serializable]
public class Column
{
+ [XmlAttribute]
+ public string TableSchema { get; set; }
+
+ [XmlAttribute]
+ public string TableName { get; set; }
+
[XmlAttribute]
public string Name { get; set; }
@@ -20,5 +26,8 @@ namespace VAR.DatabaseExplorer.Code.DataTransfer
[XmlAttribute]
public bool PK { get; set; }
+
+ [XmlAttribute]
+ public bool Indentity { get; set; }
}
}
\ No newline at end of file
diff --git a/VAR.DatabaseExplorer/UI/FrmBaseDatos.Designer.cs b/VAR.DatabaseExplorer/UI/FrmBaseDatos.Designer.cs
index cc19878..1529a9f 100644
--- a/VAR.DatabaseExplorer/UI/FrmBaseDatos.Designer.cs
+++ b/VAR.DatabaseExplorer/UI/FrmBaseDatos.Designer.cs
@@ -50,6 +50,7 @@
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();
+ this.btnExportSchema = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
this.splitContainer1.Panel2.SuspendLayout();
@@ -125,7 +126,7 @@
// btnDocGen
//
this.btnDocGen.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
- this.btnDocGen.Location = new System.Drawing.Point(84, 485);
+ this.btnDocGen.Location = new System.Drawing.Point(181, 485);
this.btnDocGen.Name = "btnDocGen";
this.btnDocGen.Size = new System.Drawing.Size(75, 23);
this.btnDocGen.TabIndex = 14;
@@ -174,6 +175,7 @@
//
// splitContainer1.Panel2
//
+ this.splitContainer1.Panel2.Controls.Add(this.btnExportSchema);
this.splitContainer1.Panel2.Controls.Add(this.btnExportData);
this.splitContainer1.Panel2.Controls.Add(this.lblTituloTabla);
this.splitContainer1.Panel2.Controls.Add(this.btnDocGen);
@@ -289,6 +291,17 @@
this.txtConString.TabIndex = 0;
this.txtConString.TabWidth = 8;
//
+ // btnExportSchema
+ //
+ this.btnExportSchema.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.btnExportSchema.Location = new System.Drawing.Point(84, 485);
+ this.btnExportSchema.Name = "btnExportSchema";
+ this.btnExportSchema.Size = new System.Drawing.Size(91, 23);
+ this.btnExportSchema.TabIndex = 16;
+ this.btnExportSchema.Text = "ExportSchema";
+ this.btnExportSchema.UseVisualStyleBackColor = true;
+ this.btnExportSchema.Click += new System.EventHandler(this.BtnExportSchema_Click);
+ //
// FrmBaseDatos
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@@ -336,5 +349,6 @@
private System.Windows.Forms.ColumnHeader colNullable;
private System.Windows.Forms.Button btnRefresh;
private System.Windows.Forms.Button btnExportData;
+ private System.Windows.Forms.Button btnExportSchema;
}
}
\ No newline at end of file
diff --git a/VAR.DatabaseExplorer/UI/FrmBaseDatos.cs b/VAR.DatabaseExplorer/UI/FrmBaseDatos.cs
index 9a3a976..d15b716 100644
--- a/VAR.DatabaseExplorer/UI/FrmBaseDatos.cs
+++ b/VAR.DatabaseExplorer/UI/FrmBaseDatos.cs
@@ -95,7 +95,7 @@ namespace VAR.DatabaseExplorer.UI
{
Parent.Enabled = false;
- Database database = DatabaseBL.Database_GetSchema(connectionString: _connectionString, fillDefinitions: true);
+ Database database = DatabaseBL.Database_GetSchema(connectionString: _connectionString, fillTableDefinitions: true, fillProcDefinitions: true);
string fixedDatabaseName = database.Name.Replace(' ', '_');
var streamWriter = new StreamWriter(fixedDatabaseName + ".documentation.html");
@@ -114,12 +114,34 @@ namespace VAR.DatabaseExplorer.UI
{
Parent.Enabled = false;
- Database database = DatabaseBL.Database_GetSchema(connectionString: _connectionString, fillDefinitions: false);
+ Database database = DatabaseBL.Database_GetSchema(connectionString: _connectionString, fillTableDefinitions: true);
string fixedDatabaseName = database.Name.Replace(' ', '_');
var streamWriter = new StreamWriter(fixedDatabaseName + ".data.sql");
DatabaseBL.Database_ExportData(streamWriter, _connectionString, database);
streamWriter.Close();
+ Parent.Enabled = true;
+ }
+
+ private void BtnExportSchema_Click(object sender, EventArgs e)
+ {
+ Parent.Enabled = false;
+
+ Database database = DatabaseBL.Database_GetSchema(connectionString: _connectionString, fillTableDefinitions: true);
+ string fixedDatabaseName = database.Name.Replace(' ', '_');
+
+ // Tables
+ var streamWriter = new StreamWriter(fixedDatabaseName + ".Tables.sql");
+ DatabaseBL.Database_ExportTables(streamWriter, _connectionString, database);
+ streamWriter.Close();
+
+ // TODO Functions
+
+ // TODO Views
+
+ // TODO Procedures
+
+
Parent.Enabled = true;
}
}