You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
219 lines
8.6 KiB
219 lines
8.6 KiB
using KGIS.Framework.DBOperator; |
|
using KGIS.Framework.Maps; |
|
using KGIS.Framework.Utils; |
|
using KGIS.Framework.Utils.Helper; |
|
using Kingo.Plugin.DataDictionary.Helper; |
|
using Kingo.PluginServiceInterface; |
|
using System; |
|
using System.Collections.Generic; |
|
using System.Data; |
|
using System.Data.SQLite; |
|
using System.IO; |
|
using System.Windows; |
|
|
|
namespace Kingo.Plugin.DataDictionary.Views |
|
{ |
|
/// <summary> |
|
/// FrmDicManagerExport.xaml 的交互逻辑 |
|
/// </summary> |
|
public partial class FrmDicManageExport : BaseWindow |
|
{ |
|
public FrmDicManageExport() |
|
{ |
|
InitializeComponent(); |
|
} |
|
|
|
private void btnBrowse_Click_1(object sender, RoutedEventArgs e) |
|
{ |
|
System.Windows.Forms.SaveFileDialog dialog = new System.Windows.Forms.SaveFileDialog(); |
|
|
|
dialog.DefaultExt = "kzd"; |
|
dialog.Filter = "字典文件|*.kzd|Excel文件|*.xlsx"; |
|
//dialog.Filter = "kzd文件(*.kzd)|*.kzd;Excel Files(*.xlsx)|*.xlsx"; |
|
if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) |
|
{ |
|
this.txtPath.Text = dialog.FileName; |
|
} |
|
} |
|
|
|
private void btnExport_Click_1(object sender, RoutedEventArgs e) |
|
{ |
|
try |
|
{ |
|
if (string.IsNullOrWhiteSpace(txtPath.Text)) |
|
{ |
|
MessageHelper.Show("未获取到文件路径!"); |
|
return; |
|
} |
|
string path = txtPath.Text; |
|
if (File.Exists(path)) |
|
{ |
|
var result = MessageHelper.ShowYesNoAndTips("文件已存在,是否覆盖?"); |
|
if (result == System.Windows.Forms.DialogResult.No) |
|
{ |
|
return; |
|
} |
|
} |
|
if (path.Contains(".xlsx")) |
|
{ |
|
ExportOwnerUnitCode exportOwnerUnitCode = new ExportOwnerUnitCode(); |
|
exportOwnerUnitCode.OutPath = path; |
|
exportOwnerUnitCode.Export(); |
|
} |
|
else if (path.Contains(".kzd")) |
|
{ |
|
string dbPath = null; |
|
if ((MapsManager.Instance.CurrProjectInfo as ProjectInfo) is ProjectInfo) |
|
{ |
|
dbPath = ((MapsManager.Instance.CurrProjectInfo as ProjectInfo) as ProjectInfo).GetDicDataPath(); |
|
} |
|
File.Copy(dbPath, path, true); |
|
|
|
//创建数据库连接 |
|
IRDBHelper dbHelper = RDBFactory.CreateDbHelper(path, DatabaseType.SQLite); |
|
List<string> tables = GetTableNames(path); |
|
List<string> views = GetViewNames(path); |
|
try |
|
{ |
|
//表 |
|
for (int i = 0; i < tables.Count; i++) |
|
{ |
|
if (tables[i].Contains("Sys_DicDetail") || tables[i].Contains("Sys_DicManage") || tables[i].Contains("Sys_DicMappingTable") || tables[i].Contains("Sys_DicType") || tables[i].Contains("sqlite_sequence")/*系统自动增量键的表*/) |
|
{ |
|
dbHelper.ExecuteDatatable(tables[i], $"delete from {tables[i]}", false); |
|
continue; |
|
} |
|
dbHelper.ExecuteDatatable(tables[i], $"Drop table {tables[i]}", false); |
|
} |
|
//视图文件 |
|
for (int j = 0; j < views.Count; j++) |
|
{ |
|
dbHelper.ExecuteDatatable(views[j], $"Drop view {views[j]}", false); |
|
} |
|
//DropSQLiteView(path, views); |
|
} |
|
catch |
|
{ |
|
} |
|
finally |
|
{ |
|
if (dbHelper != null && dbHelper.State != System.Data.ConnectionState.Closed) |
|
dbHelper.DisConnect(); |
|
} |
|
UpdateTable(dbPath, path); |
|
} |
|
MessageHelper.Show("字典导出已完成!"); |
|
this.Close(); |
|
} |
|
catch (Exception ex) |
|
{ |
|
MessageHelper.ShowError("导出数据字典异常:" + ex.Message); |
|
} |
|
} |
|
|
|
private List<string> GetTableNames(string path) |
|
{ |
|
// 获取指定数据库中的所有表名 |
|
List<string> tables = new List<string>(); |
|
//string connectionString = @"Data Source='" + path + "';Version=3;"; |
|
using (SQLiteConnection conn = new SQLiteConnection("Data Source=" + path)) |
|
{ |
|
conn.Open(); |
|
// 获取数据库中的所有表名 |
|
string sqlTableNames = "select name from sqlite_master where type='table' order by name;"; |
|
// 创建命令对象 |
|
SQLiteCommand cmd = new SQLiteCommand(sqlTableNames, conn); |
|
using (SQLiteDataReader dr = cmd.ExecuteReader()) |
|
{ |
|
while (dr.Read()) |
|
{ |
|
// 表名 |
|
tables.Add(dr["Name"].ToString()); |
|
} |
|
} |
|
} |
|
return tables; |
|
} |
|
private void UpdateTable(string path, string tagrtPath) |
|
{ |
|
List<string> tableName = new List<string>(); |
|
tableName.Add("Sys_DicDetail"); |
|
tableName.Add("Sys_DicManage"); |
|
tableName.Add("Sys_DicMappingTable"); |
|
tableName.Add("Sys_DicType"); |
|
IRDBHelper kzdHelper = RDBFactory.CreateDbHelper(path, DatabaseType.SQLite); |
|
try |
|
{ |
|
for (int i = 0; i < tableName.Count; i++) |
|
{ |
|
DataTable dtRST = kzdHelper.ExecuteDatatable(tableName[i], $"SELECT * FROM {tableName[i]}", false); |
|
DataTableToSQLite myTabInfo1 = new DataTableToSQLite(dtRST, path, false); |
|
myTabInfo1.ImportToSqliteBatch(dtRST, tagrtPath); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug(ex); |
|
return; |
|
} |
|
finally |
|
{ |
|
if (kzdHelper != null && kzdHelper.State != System.Data.ConnectionState.Closed) |
|
kzdHelper.DisConnect(); |
|
} |
|
} |
|
|
|
private List<string> GetViewNames(string path) |
|
{ |
|
// 获取指定数据库中的所有视图名 |
|
List<string> views = new List<string>(); |
|
//string connectionString = @"Data Source='" + path + "';Version=3;"; |
|
using (SQLiteConnection conn = new SQLiteConnection("Data Source=" + path)) |
|
{ |
|
conn.Open(); |
|
// 获取数据库中的所有视图名 |
|
string sqlViewNames = "select name from sqlite_master where type='view' order by name"; |
|
// 创建命令对象 |
|
SQLiteCommand cmd = new SQLiteCommand(sqlViewNames, conn); |
|
using (SQLiteDataReader dr = cmd.ExecuteReader()) |
|
{ |
|
while (dr.Read()) |
|
{ |
|
// 表名 |
|
views.Add(dr["Name"].ToString()); |
|
} |
|
} |
|
} |
|
return views; |
|
} |
|
private void DropSQLiteView(string dbPath, List<string> viewsSql) |
|
{ |
|
try |
|
{ |
|
using (System.Data.SQLite.SQLiteConnection conn = new System.Data.SQLite.SQLiteConnection("Data Source=" + dbPath)) |
|
{ |
|
conn.Open(); |
|
using (System.Data.SQLite.SQLiteTransaction pTrans = conn.BeginTransaction()) |
|
{ |
|
using (System.Data.SQLite.SQLiteCommand cmd = new System.Data.SQLite.SQLiteCommand(conn)) |
|
{ |
|
for (int i = 0; i < viewsSql.Count; i++) |
|
{ |
|
cmd.CommandText = $"drop view {viewsSql[i]};"; |
|
cmd.ExecuteNonQuery(); |
|
} |
|
pTrans.Commit(); |
|
} |
|
} |
|
conn.Close(); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("删除视图文件(地址:" + dbPath + ") 执行失败,异常原因: " + ex + " ; "); |
|
return; |
|
} |
|
} |
|
|
|
} |
|
}
|
|
|