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.
		
		
		
		
		
			
		
			
				
					
					
						
							257 lines
						
					
					
						
							12 KiB
						
					
					
				
			
		
		
	
	
							257 lines
						
					
					
						
							12 KiB
						
					
					
				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.Windows; | 
						|
using System.Windows.Forms; | 
						|
 | 
						|
namespace Kingo.Plugin.DataLoad.View | 
						|
{ | 
						|
    /// <summary> | 
						|
    /// FrmLoadGJWTTB.xaml 的交互逻辑 | 
						|
    /// </summary> | 
						|
    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) | 
						|
        { | 
						|
            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) | 
						|
                                { | 
						|
                                    OleDbConnection conn; | 
						|
                                    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) | 
						|
                                        { | 
						|
                                            //空行数据插入异常,不抛出 | 
						|
                                        } | 
						|
                                    } | 
						|
                                    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); | 
						|
                        | 
						|
                        List<string> lstSql = new List<string> | 
						|
                        { | 
						|
                            "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 = 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); | 
						|
                    } | 
						|
                } | 
						|
                MessageHelper.Show("加载完成!"); | 
						|
                this.Close(); | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                MessageHelper.ShowError("加载国家问题图斑异常:" + ex.Message); | 
						|
            } | 
						|
        } | 
						|
 | 
						|
        public static IRDBHelper CreateDbHelper(string mdbPath) | 
						|
        { | 
						|
            string strConn = "provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}"; | 
						|
            IRDBHelper irdbhelper; | 
						|
            try | 
						|
            { | 
						|
                strConn = string.Format(strConn, mdbPath); | 
						|
                irdbhelper = RDBFactory.CreateDbHelper(strConn, DatabaseType.MSAccess); | 
						|
            } | 
						|
            catch (Exception) | 
						|
            { | 
						|
                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; | 
						|
        } | 
						|
 | 
						|
        /// <summary> | 
						|
        /// 执行多条操作数据库的sql语句 | 
						|
        /// </summary> | 
						|
        /// <param name="strSql"></param> | 
						|
        public static int ExcuteListSQL(List<string> 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) | 
						|
            { | 
						|
                irdbhelper.Rollback(); | 
						|
                return -1; | 
						|
            } | 
						|
            finally | 
						|
            { | 
						|
                if (irdbhelper != null) | 
						|
                    irdbhelper.DisConnect(); | 
						|
            } | 
						|
        } | 
						|
    } | 
						|
}
 | 
						|
 |