using Aspose.Cells; using ESRI.ArcGIS.Geodatabase; using ESRI.ArcGIS.Geometry; using KGIS.Framework.AE; using KGIS.Framework.DBOperator; using KGIS.Framework.Maps; using KGIS.Framework.Utils; using KGIS.Framework.Utils.Helper; using Kingo.PluginServiceInterface; using System; using System.Collections.Generic; using System.Data; using System.Data.OleDb; using System.IO; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Forms; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace Kingo.Plugin.DataLoad.View { /// /// FrmLoadGJWTTB.xaml 的交互逻辑 /// public partial class FrmLoadGJWTTB : BaseWindow { public FrmLoadGJWTTB() { InitializeComponent(); } private void btnBrowse_Click_1(object sender, RoutedEventArgs e) { FolderBrowserDialog dialog = new FolderBrowserDialog(); dialog.Description = "请选择文件路径"; if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { this.txtPath.Text = dialog.SelectedPath; } } private void btnImport_Click_1(object sender, RoutedEventArgs e) { OleDbConnection conn = null; OleDbTransaction pTrans = null; try { if (string.IsNullOrWhiteSpace(txtPath.Text)) { MessageHelper.Show("未获取到文件路径:" + txtPath.Text); return; } string path = txtPath.Text; ProjectInfo info = (MapsManager.Instance.CurrProjectInfo as ProjectInfo); string wttbPath = info.ProjDir + "\\gjwttb.mdb"; string mdbTempPath = AppDomain.CurrentDomain.BaseDirectory + "Plugins\\Kingo.Plugin.DataLoad\\Resources\\ProcessData.mdb"; File.Copy(mdbTempPath, wttbPath, true); foreach (string file in Directory.GetFiles(path)) { FileInfo fileInfo = new FileInfo(file); switch (fileInfo.Extension.ToUpper()) { case ".XLS": case ".XLSX": { Workbook workbook = new Workbook(fileInfo.FullName); Cells cells = workbook.Worksheets[0].Cells; DataTable dtGJHCJG = cells.ExportDataTable(1, 0, cells.MaxDataRow, cells.MaxColumn + 1, false); foreach (DataColumn c in dtGJHCJG.Columns) { try { c.ColumnName = dtGJHCJG.Rows[0][c.ColumnName].ToString(); } catch { } } dtGJHCJG.Rows.RemoveAt(0); if (dtGJHCJG != null && dtGJHCJG.Rows.Count > 0) { try { string connectionString = "provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + wttbPath; conn = new OleDbConnection(connectionString); conn.Open(); } catch { string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + wttbPath; conn = new OleDbConnection(connectionString); conn.Open(); } OleDbCommand cmd = new OleDbCommand("drop table DLTB_WTTB ", conn); try { cmd.CommandText = "drop table DLTB_WTTB "; cmd.ExecuteNonQuery(); } catch { } //} try { cmd.CommandText = "Create TABLE DLTB_WTTB (BSM varchar(50),地类核查结果说明 Memo,属性核查结果说明 memo,其他核查结果说明 memo,备注 memo,照片地类 memo,情况说明 memo)"; cmd.ExecuteNonQuery(); } catch { } foreach (DataRow dr in dtGJHCJG.Rows) { try { string insertSQL = string.Format("insert into DLTB_WTTB (BSM,地类核查结果说明,属性核查结果说明,其他核查结果说明,备注,照片地类,情况说明) values ('{0}','{1}','{2}','{3}','{4}','{5}','{6}')", dr["标识码"], dr["地类核查结果说明"], dr["属性核查结果说明"], dr["其他核查结果说明"], dr["备注"], dr["照片地类"], dr["情况说明"]); cmd.CommandText = insertSQL; cmd.ExecuteNonQuery(); } catch (Exception ex) { //空行数据插入异常,不抛出 } } dtGJHCJG.Clear(); if (conn != null) { conn.Close(); conn.Dispose(); } GC.Collect(); } } break; case ".VCT": KGIS.Framework.VCT.Helper.VCTConvertGeodatabaseHelper helper = new KGIS.Framework.VCT.Helper.VCTConvertGeodatabaseHelper(); helper.RootPath = System.IO.Path.GetDirectoryName(fileInfo.FullName); helper.VCTConvertGeodatabse(fileInfo.FullName, 1, true, false); break; default: break; } } foreach (string dir in Directory.GetDirectories(path)) { if (dir.Contains("GXGC.gdb")) { WorkspaceAPI workspaceAPI = new WorkspaceAPI(dir, KGIS.Framework.AE.Enum.WorkspaceTypeEnum.GDBFile); IFeatureClassAPI featureAPI = workspaceAPI.OpenFeatureClass("DLTB"); WorkspaceAPI workspaceAPI_MDB = new WorkspaceAPI(wttbPath, KGIS.Framework.AE.Enum.WorkspaceTypeEnum.MDBFile); ISpatialReference pSR = (featureAPI.FeatureClass as IGeoDataset).SpatialReference; GeoDBAPI.CreateFields(featureAPI.FeatureClass.Fields, out IFields ifields); IFeatureClassAPI CreateFeatureClass = workspaceAPI_MDB.CreateFeatureClass("DLTBGXGC", pSR, ifields); IFeatureClass fcTargetTemp = CreateFeatureClass.FeatureClass; featureAPI.FcToFc(fcTargetTemp, null, false); //if (fcTargetTemp != null) // Marshal.ReleaseComObject(fcTargetTemp); //CreateFeatureClass.CloseFeatureClass(); //workspaceAPI_MDB.CloseWorkspace(false); List lstSql = new List(); lstSql.Add("delete distinctrow a.* from (DLTBGXGC a left join DLTB_WTTB b on a.bsm=b.bsm) where b.bsm is null"); string[] toFieldsSet = "BSM,地类核查结果说明,属性核查结果说明,其他核查结果说明,备注,照片地类,情况说明".Split(','); string[] fieldsLengthSet = "varchar(50),Memo,memo,memo,memo,memo,memo".Split(','); string sql = string.Empty; for (int i = 0; i < toFieldsSet.Length; i++) { if (!string.IsNullOrEmpty(toFieldsSet[i]) && toFieldsSet[i] != "BSM") { //sql += "column " + toFieldsSet[i] + " " + fieldsLengthSet[i] + ","; CreateFeatureClass.AddField(toFieldsSet[i], esriFieldType.esriFieldTypeString, toFieldsSet[i]); } } //sql = sql.Substring(0, sql.Length - 1); //lstSql.Add("alter table DLTBGXGC add " + sql); sql = string.Empty; for (int i = 0; i < toFieldsSet.Length; i++) { if (!string.IsNullOrEmpty(toFieldsSet[i]) && toFieldsSet[i] != "BSM") { sql += "a." + toFieldsSet[i] + "=b." + toFieldsSet[i] + ","; } } sql = sql.Substring(0, sql.Length - 1); lstSql.Add("Update DLTBGXGC a,DLTB_WTTB b set " + sql + " where a.BSM=b.BSM"); ExcuteListSQL(lstSql, wttbPath); workspaceAPI_MDB = new WorkspaceAPI(wttbPath, KGIS.Framework.AE.Enum.WorkspaceTypeEnum.MDBFile); //WorkspaceAPI workspaceAPI_Scheme = new WorkspaceAPI(info.GetSchemeDBPath(), KGIS.Framework.AE.Enum.WorkspaceTypeEnum.GDBFile); //workspaceAPI_Scheme.DeleteFeatureClass("SB_DLTBGXGC"); //GeoDBAPI.CreateFields(CreateFeatureClass.FeatureClass.Fields, out IFields ifields2); //IFeatureClass fcTargetTemp_SB = workspaceAPI_Scheme.CreateFeatureClass("SB_DLTBGXGC", pSR, ifields2).FeatureClass; //IFeatureClassAPI featureAPI_MDB = workspaceAPI_MDB.OpenFeatureClass("DLTBGXGC"); //CreateFeatureClass.FcToFc(fcTargetTemp_SB, null, false); } } MessageHelper.Show("加载完成!"); this.Close(); } catch (Exception ex) { MessageHelper.ShowError("加载国家问题图斑异常:" + ex.Message); } } public static IRDBHelper CreateDbHelper(string mdbPath) { IRDBHelper irdbhelper = null; string strConn = "provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}"; try { strConn = string.Format(strConn, mdbPath); irdbhelper = RDBFactory.CreateDbHelper(strConn, DatabaseType.MSAccess); } catch (Exception ex) { try { strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}"; strConn = string.Format(strConn, mdbPath); irdbhelper = RDBFactory.CreateDbHelper(strConn, DatabaseType.MSAccess); } catch (Exception ex1) { LogAPI.Debug(ex1); return null; } } return irdbhelper; } /// /// 执行多条操作数据库的sql语句 /// /// public static int ExcuteListSQL(List lstSql, string mdbPath) { IRDBHelper irdbhelper = null; try { int i = -1; irdbhelper = CreateDbHelper(mdbPath); foreach (string str in lstSql) { i = irdbhelper.ExecuteSQL(str); if (i < 0 && !str.ToUpper().Contains("DROP")) { LogAPI.Debug("分析sql失败" + str); } } return 1; } catch (Exception ex) { irdbhelper.Rollback(); return -1; } finally { if (irdbhelper != null) irdbhelper.DisConnect(); } } } }