代码拉取完成,页面将自动刷新
using ComponentFactory.Krypton.Toolkit;
using DBCHM.Common;
using DocTools;
using DocTools.Dtos;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;
namespace DBCHM
{
public partial class ImportForm : KryptonForm
{
public ImportForm()
{
InitializeComponent();
CheckForIllegalCrossThreadCalls = false;
//为KeyDown能应用到所有控件上 注册 KeyDown 事件
foreach (Control control in this.Controls)
{
control.KeyDown += control_KeyDown;
}
}
public void control_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Escape)
{
this.Close();
}
}
private void ImportForm_Load(object sender, EventArgs e)
{
txtExplain.Text = @"本工具目前支持 pdm/xml 文件来 进行更新批注(注释):
pdm 由powerdesigner设计数据库时产生。
xml 由visual studio设置 实体类库的项目属性,勾选 XML文档文件 后生成项目时产生。
xml 由dbchm的 XML导出 而产生。";
}
private void BtnBrow_Click(object sender, EventArgs e)
{
var openFileDialog = new OpenFileDialog
{
//支持 pdm,实体类注释产生的xml文档,dbchm导出的xml文件
Filter = "支持文件类型(*.pdm;*.xml)|*.pdm;*.xml|PowerDesigner文件(*.pdm)|*.pdm|xml文件|*.xml",
Multiselect = true
};
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
txtMulItem.Text = string.Join("\r\n", openFileDialog.FileNames);
}
}
private void BtnUpdateDisplayName_Click(object sender, EventArgs e)
{
if (DBUtils.Instance == null)
{
MessageBox.Show("更新批注,需连接数据库,请切换到要更新批注的数据库!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
return;
}
if (string.IsNullOrWhiteSpace(txtMulItem.Text))
{
MessageBox.Show("请先选择批注数据文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
return;
}
FormUtils.ShowProcessing("正在更新批注到数据库,请稍等......", this, arg =>
{
string[] paths = txtMulItem.Text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
foreach (string ph in paths)
{
string extName = Path.GetExtension(ph).ToLower();
try
{
if (File.Exists(ph))
{
if (extName == ".pdm")
{
UpdateCommentByPDM(ph);
}
else if (extName == ".xml")
{
UpdateCommentByXML(ph);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "出错", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return;
}
}
MessageBox.Show("更新表列批注完成!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
FormUtils.IsOK_Close = true;
this.Close();
}, null);
}
/// <summary>
/// 通过pdm文件更新批注
/// </summary>
/// <param name="path"></param>
void UpdateCommentByPDM(string path)
{
var lstTabs = GetTables(path);
var dbInfo = DBUtils.Instance?.Info;
foreach (var tab in lstTabs)
{
string tab_Comment = tab.Name;
if (!string.IsNullOrWhiteSpace(tab_Comment)
&& !tab.Code.Equals(tab_Comment, StringComparison.OrdinalIgnoreCase))
{
dbInfo.SetTableComment(tab.Code, tab_Comment);
}
var lstCols = tab.Columns;
foreach (var col in lstCols)
{
string col_Comment = col.Name;
if (!string.IsNullOrWhiteSpace(col_Comment)
&& !col.Code.Equals(col_Comment, StringComparison.OrdinalIgnoreCase))
{
dbInfo.SetColumnComment(tab.Code, col.Code, col_Comment);
}
}
}
}
static IList<PdmModels.TableInfo> GetTables(params string[] pdmPaths)
{
List<PdmModels.TableInfo> lstTables = new List<PdmModels.TableInfo>();
var pdmReader = new PDM.PdmReader();
foreach (string path in pdmPaths)
{
if (File.Exists(path))
{
var models = pdmReader.ReadFromFile(path);
lstTables.AddRange(models.Tables);
}
}
lstTables = lstTables.OrderBy(t => t.Code).ToList();
return lstTables;
}
void UpdateCommentByXML(string path)
{
var xmlContent = File.ReadAllText(path, Encoding.UTF8);
if (xmlContent.Contains("ArrayOfTableDto"))
{
//通过 dbchm 导出的 XML文件 来更新 表列批注
XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlContent);
var dbName = doc.DocumentElement.GetAttribute("databaseName");
if (!DBUtils.Instance.Info.DBName.Equals(dbName, StringComparison.OrdinalIgnoreCase))
{
if (MessageBox.Show("检测到数据库名称不一致,确定要继续吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.Cancel)
{
return;
}
}
var lstDTO = typeof(List<TableDto>).DeserializeXml(xmlContent) as List<TableDto>;
foreach (var tabInfo in lstDTO)
{
if (DBUtils.Instance.Info.IsExistTable(tabInfo.TableName) && !string.IsNullOrWhiteSpace(tabInfo.Comment))
{
DBUtils.Instance.Info.SetTableComment(tabInfo.TableName, tabInfo.Comment);
}
foreach (var colInfo in tabInfo.Columns)
{
if (DBUtils.Instance.Info.IsExistColumn(tabInfo.TableName, colInfo.ColumnName) && !string.IsNullOrWhiteSpace(colInfo.Comment))
{
DBUtils.Instance.Info.SetColumnComment(tabInfo.TableName, colInfo.ColumnName, colInfo.Comment);
}
}
}
}
else
{
//通过 有 VS 生成的 实体类库 XML文档文件 来更新 表列批注
XmlAnalyze analyze = new XmlAnalyze(path);
var data = analyze.Data;
foreach (var item in data)
{
if (DBUtils.Instance.Info.IsExistTable(item.Key.Key) && !string.IsNullOrWhiteSpace(item.Key.Value))
{
DBUtils.Instance.Info.SetTableComment(item.Key.Key, item.Key.Value);
}
foreach (var colKV in item.Value)
{
if (DBUtils.Instance.Info.IsExistColumn(item.Key.Key, colKV.Key) && !string.IsNullOrWhiteSpace(colKV.Value))
{
DBUtils.Instance.Info.SetColumnComment(item.Key.Key, colKV.Key, colKV.Value);
}
}
}
}
}
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。