您的位置:首页 > 数据库

MXQ_SQL_数据库辅助工具V1.2

2012-04-30 22:21 141 查看
V1.2版本

1.2的源码暂时没发上来,过几天修改优化完在放上来,呵呵

直接看效果图







V1.0 版本

功能

1.快速设置数据字段说明

2.导出数据库文档 WORD文件

3.导出数据库字段说明SQL语句 文本文件

问题

打开导出WORD发现第二页的第一个表格 会和第一页末尾的表格叠加在一起,目前的办法不是最优的,不知道谁有好的建议,此问题将在下次更新时解决

V1.1 版本

增加可视化链接数据配置

快速生成 创建 添加 删除 修改 查询SQL语句







代码分享

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.Win32;
using System.Threading;
using Microsoft.Office.Interop.Word;
using System.Xml;
using System.Reflection;
using System.IO;

namespace MXQ_SQLServer_Manager
{
public partial class fm_mxq_sql_manager : Form
{
private string DataBasesName = "Master";//数据库
private string TableName;               //数据表
private string TableColumnName;         //数据列名
private StringBuilder sqlStr;
private bool connStringState = false;

public fm_mxq_sql_manager()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
while (!connStringState)
{
try
{
connStringState = true;
BeginInvoke((MethodInvoker)delegate()
{
Bind_DataBasesNameList();
Bind_DataTableNameList();
});
}
catch
{
connStringState = false;
tmLoadEvent.Start();
}
}
}

//绑定数据库名称列表
private void Bind_DataBasesNameList()
{
try
{

cboDataBaseName.Text = "";
cboDataBaseName.Items.Clear();
sqlStr = new StringBuilder();
sqlStr.Append(" USE [Master] ");
sqlStr.Append(" SELECT DBID,NAME,CRDATE,FILENAME ");
sqlStr.Append(" FROM SYSDATABASES WHERE name NOT IN('master','tempdb','model','msdb','ReportServer','ReportServerTempDB')  ");
sqlStr.Append(" ORDER BY NAME ");
DataSet dataBasesLists = SqlHelper.ExecuteDataTable(SqlHelper.ConnectionStringLocalTransaction
, CommandType.Text, sqlStr.ToString(), null);
foreach (DataRow dt_dr in dataBasesLists.Tables[0].Rows)
{
cboDataBaseName.Items.Add(dt_dr["NAME"]);
}
DataBasesName = cboDataBaseName.Items[0].ToString();
}
catch
{
return;
}
}

//绑定数据表名称列表
private void Bind_DataTableNameList()
{

try
{
DataBasesName = cboDataBaseName.SelectedItem != null ? cboDataBaseName.SelectedItem.ToString()
: cboDataBaseName.Items[0].ToString();
cboTableNames.Text = "";
cboTableNames.Items.Clear();
sqlStr = new StringBuilder();
sqlStr.Append(" USE [" + DataBasesName + "] ");
sqlStr.Append(" SELECT object_id,name,create_date,modify_date,type,type_desc  ");
sqlStr.Append(" FROM sys.tables ");
sqlStr.Append(" ORDER BY name ");

DataSet dataTableLists = SqlHelper.ExecuteDataTable(SqlHelper.ConnectionStringLocalTransaction
, CommandType.Text, sqlStr.ToString(), null);
foreach (DataRow dt_dr in dataTableLists.Tables[0].Rows)
{
cboTableNames.Items.Add(dt_dr["name"]);
}
TableName = cboTableNames.Items[0].ToString();
}
catch
{
return;
// throw;
}
}

//绑定数据表结构信息
private void Bind_TableInfo()
{
dgvTableInfo.DataSource = null;
TableName = cboTableNames.SelectedItem != null ? cboTableNames.SelectedItem.ToString() : cboTableNames.Items[0].ToString();
dgvTableInfo.DataSource = GetDataTableInfo(TableName);
}

private DataTable GetDataTableInfo(string dataTableName)
{

sqlStr = new StringBuilder();
sqlStr.Append(" USE [" + DataBasesName + "] ");
sqlStr.Append(" declare @objname nvarchar(800), @objid int , @sysobj_type char(2), @dbname    sysname,@no varchar(35), ");
sqlStr.Append("         @yes varchar(35), @none varchar(35), @precscaletypes nvarchar(150),@colname sysname ");
sqlStr.Append(" set @objname='" + dataTableName + "' ");
sqlStr.Append(" select @objid = object_id, @sysobj_type = type from sys.all_objects where object_id = object_id(@objname) ");
sqlStr.Append(" select @no = '', @yes = '√', @none = 'none' ");
sqlStr.Append(" select @precscaletypes =  ");
sqlStr.Append(" N'tinyint,smallint,decimal,int,real,money,float,numeric,smallmoney,date,time,datetime2,datetimeoffset,' ");
sqlStr.Append(" select ");
sqlStr.Append(" '序号'                =column_id, ");
sqlStr.Append(" '列名'                = name, ");
sqlStr.Append(" '类型'                    = type_name(user_type_id), ");
sqlStr.Append(" '长度'                    = convert(int, max_length), ");
sqlStr.Append(" '精度'                    = case when charindex(type_name(system_type_id) + ',', @precscaletypes) > 0 ");
sqlStr.Append(" then convert(char(5),ColumnProperty(object_id, name, 'precision')) ");
sqlStr.Append(" else '     ' end, ");
sqlStr.Append(" '小数'                    = case when charindex(type_name(system_type_id) + ',', @precscaletypes) > 0 ");
sqlStr.Append(" then convert(char(5),OdbcScale(system_type_id,scale)) ");
sqlStr.Append(" else '     ' end, ");
sqlStr.Append(" '说明'=ISNULL((SELECT TOP 1 PFD.value FROM  sys.extended_properties PFD WHERE PFD.class=1  ");
sqlStr.Append("  AND PFD.major_id=@objid  AND PFD.minor_id=column_id),N'') , ");
sqlStr.Append(" '允许NULL值'                = case when is_nullable = 0 then @no else @yes end, ");
sqlStr.Append(" '标识列'=case when (select col_name(@objid, column_id) ");
sqlStr.Append("  from sys.identity_columns where object_id=@objid)=name then @yes else @no end  ");
sqlStr.Append(" from sys.all_columns AS AC where object_id =@objid ");
DataSet dataTableInfo = SqlHelper.ExecuteDataTable(SqlHelper.ConnectionStringLocalTransaction
, CommandType.Text, sqlStr.ToString(), null);
return dataTableInfo.Tables[0];
}

//数据库选中项改变
private void cboDataBaseName_SelectedIndexChanged(object sender, EventArgs e)
{
if (cboDataBaseName.SelectedIndex != -1)
{
Bind_DataTableNameList();
}
dgvTableInfo.DataSource = null;
}

//数据表选中项改变
private void cboTableNames_SelectedIndexChanged(object sender, EventArgs e)
{
if (cboTableNames.SelectedIndex != -1)
{
Bind_TableInfo();
}
}

//添加或修改数据表字段说明
private void addDataColumnDescription()
{
try
{
sqlStr = new StringBuilder();
sqlStr.Append(" USE [" + DataBasesName + "] ");
sqlStr.Append(" EXEC sys.sp_addextendedproperty @name=N'MS_Description',  ");
sqlStr.Append(" @value=@DataColumnDescription, @level0type=N'SCHEMA', ");
sqlStr.Append(" @level0name=N'dbo',@level1type=N'TABLE',@level1name=N'" + TableName + "', ");
sqlStr.Append(" @level2type=N'COLUMN',@level2name=N'" + TableColumnName + "' ");
SqlParameter[] sp = new SqlParameter[] {
new  SqlParameter("@DataColumnDescription",txtDataColumnDescription.Text.Trim()),
};
SqlHelper.ExecuteNonQuery(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, sqlStr.ToString(), sp);
}
catch
{
sqlStr = new StringBuilder();
sqlStr.Append(" USE [" + DataBasesName + "] ");
sqlStr.Append(" DECLARE @v sql_variant  ");
sqlStr.Append(" SET @v=@DataColumnDescription ");
sqlStr.Append(" EXECUTE sp_updateextendedproperty N'MS_Description', @v, N'SCHEMA', ");
sqlStr.Append(" N'dbo', N'TABLE', N'" + TableName + "', N'COLUMN', N'" + TableColumnName + "' ");
SqlParameter[] sp = new SqlParameter[] {
new  SqlParameter("@DataColumnDescription",txtDataColumnDescription.Text.Trim()),
};
SqlHelper.ExecuteNonQuery(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, sqlStr.ToString(), sp);
//throw;
}
Bind_TableInfo();
}

//dgv改变选中单元格
private void dgvTableInfo_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex != -1 && e.ColumnIndex != -1)
{
txtDataColumnDescription.Text = dgvTableInfo.Rows[e.RowIndex].Cells["说明"].Value.ToString();
}
}

//文本框失去焦点
private void txtDataColumnDescription_Leave(object sender, EventArgs e)
{
addDataColumnDescription();
}

private void dgvTableInfo_RowEnter(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex != -1 && e.ColumnIndex != -1)
{
TableColumnName = dgvTableInfo.Rows[e.RowIndex].Cells["列名"].Value.ToString();
txtDataColumnDescription.Text = dgvTableInfo.Rows[e.RowIndex].Cells["说明"].Value.ToString();
}
}

private void btn_isTop_Click(object sender, EventArgs e)
{
if (this.btn_isTop.Text == "曱")
{
this.TopMost = false;
btn_isTop.Text = "甴";
}
else
{
this.TopMost = true;
btn_isTop.Text = "曱";
}
}

private void tsmi_ShowMain_Click(object sender, EventArgs e)
{
this.TopMost = true;
this.WindowState = System.Windows.Forms.FormWindowState.Normal;
this.TopMost = false;
}

private void tsmi_exit_Click(object sender, EventArgs e)
{
System.Windows.Forms.Application.Exit();
}

private void tsmi_start_Click(object sender, EventArgs e)
{
SetAutoRun("MXQ_SQLServer_Manager", "\"" + System.Windows.Forms.Application.StartupPath + "\\MXQ_SQLServer_Manager.exe\" /start");
}

#region 开机自动启动
/// <summary>
///开机自动启动
/// </summary>
/// <param name="keyName">注册表key.</param>
/// <param name="filePath">软件路径</param>
/// <returns>返回:Boolean 类型</returns>
public static bool SetAutoRun(string ShortFileName, string filePath)
{
try
{
//打开子键节点
RegistryKey MyReg = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
if (MyReg == null)
{//如果子键节点不存在,则创建之
MyReg = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");
}
//在注册表中设置自启动程序
MyReg.SetValue(ShortFileName, filePath);
MyReg.Close();
}
catch
{
return false;
}
return true;
}
#endregion

private void btnImportOut_Click(object sender, EventArgs e)
{

#region 导出数据库说明到Word
if (rdoDataBaseDescription.Checked)
{
string[] tableColumnNames = new string[] { "序号", "列名", "类型", "长度" , "精度" ,
"小数", "说明", "允许NULL值", "标识列" };
string fileName = "数据库 " + DataBasesName + DateTime.Now.ToString("yyyy年MM月dd日hhmms");
SaveFileDialog sfd = new SaveFileDialog();
sfd.AddExtension = true;
sfd.RestoreDirectory = true;
sfd.FileName = fileName;
sfd.DefaultExt = ".doc";
sfd.Filter = "word文档|*.doc|所有文件|*.*";
sfd.Title = "导出数据库说明文档";
if (sfd.ShowDialog() == DialogResult.OK)
{
foreach (System.Diagnostics.Process p in System.Diagnostics.Process.GetProcessesByName("WINWORD"))
{
p.Kill();
}
string filePatch = sfd.FileName;
//创建Word文档
Object Nothing = Missing.Value;
Microsoft.Office.Interop.Word.Application WordApp = new Microsoft.Office.Interop.Word.Application();
Microsoft.Office.Interop.Word.Document WordDoc = WordApp.Documents.Add(ref Nothing, ref Nothing, ref Nothing, ref Nothing);
WordApp.Selection.ParagraphFormat.LineSpacing = 3f;//设置文档的行间距
//文档中创建表格
foreach (var objItem in cboTableNames.Items)
{
DataTable dt = GetDataTableInfo(objItem.ToString());
object count = 20;
object WdLine = WdUnits.wdLine;//换一行;
WordApp.Selection.MoveDown(ref WdLine, ref count, ref Nothing);//移动焦点
WordApp.Selection.TypeParagraph();//插入段落
Microsoft.Office.Interop.Word.Table newTable = WordDoc.Tables.Add(WordApp.Selection.Range, dt.Rows.Count + 1, 9, ref Nothing, ref Nothing);
//设置表格样式
WordDoc.Content.Font.Size = 10;
newTable.Borders.OutsideLineStyle = WdLineStyle.wdLineStyleDouble;
newTable.Borders.InsideLineStyle = WdLineStyle.wdLineStyleSingle;
newTable.Columns[1].Width = 40f;
newTable.Columns[2].Width = 100f;
newTable.Columns[3].Width = 60f;
newTable.Columns[4].Width = 40f;
newTable.Columns[5].Width = 40f;
newTable.Columns[6].Width = 40f;
newTable.Columns[7].Width = 80f;
newTable.Columns[8].Width = 40f;
newTable.Columns[9].Width = 40f;

for (int i = 0; i < dt.Rows.Count; i++)
{
for (int j = 0; j < 9; j++)
{
if (i < 3)
{
newTable.Cell(1, 1).Range.Text = "表名:" + objItem.ToString();
newTable.Cell(2, j + 1).Range.Text = tableColumnNames[j];
}
newTable.Cell(i + 3, j + 1).Range.Text = dt.Rows[i][j].ToString();
}
}
newTable.Cell(1, 1).Merge(newTable.Cell(1, 9));

try
{
//文件保存
WordDoc.SaveAs(filePatch);
MessageBox.Show("创建成功! " + filePatch);
}
catch (Exception ex)
{
MessageBox.Show("异常错误" + ex.Message.ToString());
}
finally
{
WordDoc.Close();
WordApp.Quit();
}

}
}
}
#endregion

#region 导出数据库字段说明SQL语句
if (rdoDataBasesDescriptionAdd.Checked)
{
string fileName = "数据库 " + DataBasesName + "说明SQL语句" + DateTime.Now.ToString("yyyy年MM月dd日hhmmss");
SaveFileDialog sfd = new SaveFileDialog();
sfd.AddExtension = true;
sfd.RestoreDirectory = true;
sfd.FileName = fileName;
sfd.DefaultExt = ".txt";
sfd.Filter = "文本文档|*.txt|所有文件|*.*";
sfd.Title = "导出数据库说明SQL语句";
if (sfd.ShowDialog() == DialogResult.OK)
{
try
{
if (Directory.Exists(sfd.FileName))
{
Directory.CreateDirectory(sfd.FileName);
}
StringBuilder dtsql = new StringBuilder();
foreach (var objItem in cboTableNames.Items)
{
DataTable dtSql = GetDataTableInfo(objItem.ToString());
foreach (DataRow dt_dr in dtSql.Rows)
{
if (dt_dr["说明"].ToString() != "")
{
dtsql.Append(" USE [" + DataBasesName + "] ");
dtsql.Append(" EXEC sys.sp_addextendedproperty @name=N'MS_Description',  ");
dtsql.Append(" @value=N'" + dt_dr["说明"] + "', @level0type=N'SCHEMA', ");
dtsql.Append(" @level0name=N'dbo',@level1type=N'TABLE',@level1name=N'" + objItem.ToString() + "', ");
dtsql.Append(" @level2type=N'COLUMN',@level2name=N'" + dt_dr["列名"] + "' ");
dtsql.Append(" \r\n ");
}
}
}
using (StreamWriter sw = new StreamWriter(sfd.FileName, false))
{
sw.Write(dtsql);
sw.Flush();
sw.Close();
}
MessageBox.Show("创建成功! " + sfd.FileName);
}
catch (Exception)
{

throw;
}
}
}
#endregion
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: