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.
		
		
		
		
		
			
		
			
				
					
					
						
							770 lines
						
					
					
						
							31 KiB
						
					
					
				
			
		
		
	
	
							770 lines
						
					
					
						
							31 KiB
						
					
					
				using KGIS.Framework.DBOperator; | 
						|
using KGIS.Framework.Maps; | 
						|
using KGIS.Framework.Platform; | 
						|
using KGIS.Framework.Utils; | 
						|
using KGIS.Framework.Utils.Utility; | 
						|
using System; | 
						|
using System.Collections.Generic; | 
						|
using System.Configuration; | 
						|
using System.Data; | 
						|
using System.Data.SQLite; | 
						|
using System.IO; | 
						|
using System.Linq; | 
						|
using System.Net; | 
						|
using System.Runtime.Serialization.Formatters.Binary; | 
						|
using System.Security.AccessControl; | 
						|
using System.Threading.Tasks; | 
						|
using System.Windows; | 
						|
using System.Xml; | 
						|
 | 
						|
namespace Kingo.PluginServiceInterface | 
						|
{ | 
						|
    /// <summary> | 
						|
    /// 公共插件-公共方法 | 
						|
    /// </summary> | 
						|
    public static class CommonHelper | 
						|
    { | 
						|
        [System.Runtime.InteropServices.DllImport("winInet.dll")] | 
						|
        private static extern bool InternetGetConnectedState(ref int dwFlag, int dwReserved); | 
						|
 | 
						|
        /// <summary> | 
						|
        /// 判断本机是否联网 | 
						|
        /// </summary> | 
						|
        /// <returns></returns> | 
						|
        public static bool IsConnectNetwork() | 
						|
        { | 
						|
            try | 
						|
            { | 
						|
                //return false; | 
						|
                int dwFlag = 0; | 
						|
                //false表示没有连接到任何网络,true表示已连接到网络上 | 
						|
                if (!InternetGetConnectedState(ref dwFlag, 0)) | 
						|
                { | 
						|
                    //if (!InternetGetConnectedState(ref dwFlag, 0)) | 
						|
                    //     Console.WriteLine("未连网!"); | 
						|
                    //else if ((dwFlag & INTERNET_CONNECTION_MODEM) != 0) | 
						|
                    //    Console.WriteLine("采用调治解调器上网。"); | 
						|
                    //else if ((dwFlag & INTERNET_CONNECTION_LAN) != 0) | 
						|
                    //    Console.WriteLine("采用网卡上网。"); | 
						|
                    return false; | 
						|
                } | 
						|
                Task<bool> task = new System.Threading.Tasks.TaskFactory().StartNew(() => | 
						|
                { | 
						|
                    //判断当前网络是否可用 | 
						|
                    IPAddress[] addresslist = Dns.GetHostAddresses("www.baidu.com"); | 
						|
                    if (addresslist[0].ToString().Length <= 6)//未联网 | 
						|
                    { | 
						|
                        return false; | 
						|
                    } | 
						|
                    else//联网 | 
						|
                    { | 
						|
                        return true; | 
						|
                    } | 
						|
                    //ping方法判断是否联网 | 
						|
                    //System.Net.NetworkInformation.Ping a = new System.Net.NetworkInformation.Ping(); | 
						|
                    //System.Net.NetworkInformation.PingReply re = a.Send("www.baidu.com", 10); | 
						|
                    //return (re.Status == System.Net.NetworkInformation.IPStatus.Success); | 
						|
                }); | 
						|
                /* | 
						|
                 * 此处等待100毫秒是因为:有些局域网、政务网(广东省政务网)ping百度网站时一直不返回, | 
						|
                 * 所以是等待100毫秒如果不返回就当做是未联网状态, | 
						|
                 * 注意:等待时间不能过长,因为当前软件有定时器(每秒调用一次)监测联网状态,会一直监测网络状态调用此方法,等待时间过长会导致线程阻塞。 | 
						|
                 */ | 
						|
                if (task.Wait(100))//在分配的时间(100毫秒)内完成执行 | 
						|
                { | 
						|
                    return task.Result; | 
						|
                } | 
						|
                else//超过100毫秒未返回,则当做是未联网状态 | 
						|
                { | 
						|
                    return false; | 
						|
                } | 
						|
            } | 
						|
            catch //(Exception ex) | 
						|
            { | 
						|
                //LogAPI.Debug("判断本机器是否联网异常:" + ex.Message); | 
						|
                return false; | 
						|
            } | 
						|
        } | 
						|
 | 
						|
        /// <summary> | 
						|
        /// 对象深拷贝 | 
						|
        /// </summary> | 
						|
        /// <typeparam name="T"></typeparam> | 
						|
        /// <param name="obj"></param> | 
						|
        /// <returns></returns> | 
						|
        public static T DeepCopyByBin<T>(T obj) | 
						|
        { | 
						|
            object retval; | 
						|
            using (MemoryStream ms = new MemoryStream()) | 
						|
            { | 
						|
                BinaryFormatter bf = new BinaryFormatter(); | 
						|
                //序列化成流 | 
						|
                bf.Serialize(ms, obj); | 
						|
                ms.Seek(0, SeekOrigin.Begin); | 
						|
                //反序列化成对象 | 
						|
                retval = bf.Deserialize(ms); | 
						|
                ms.Close(); | 
						|
            } | 
						|
            return (T)retval; | 
						|
        } | 
						|
 | 
						|
        /// <summary> | 
						|
        /// 复制或剪切文件到剪切板 | 
						|
        /// </summary> | 
						|
        /// <param name="files">文件路径数组</param> | 
						|
        /// <param name="cut">true:剪切;false:复制</param> | 
						|
        public static void CopyToClipboard(object obj, bool cut = false, EnumCopyType enumCopyType = EnumCopyType.enumText) | 
						|
        { | 
						|
            try | 
						|
            { | 
						|
                if (obj == null || string.IsNullOrWhiteSpace(obj.ToString())) | 
						|
                { | 
						|
                    return; | 
						|
                } | 
						|
                IDataObject data = null; | 
						|
                switch (enumCopyType) | 
						|
                { | 
						|
                    case EnumCopyType.enumText: | 
						|
                        data = new DataObject(DataFormats.Text, obj.ToString()) as IDataObject; | 
						|
                        break; | 
						|
                    case EnumCopyType.enumFiles: | 
						|
                        data = new DataObject(DataFormats.FileDrop, obj) as IDataObject; | 
						|
                        break; | 
						|
                } | 
						|
                System.IO.MemoryStream memo = new System.IO.MemoryStream(4); | 
						|
                byte[] bytes = new byte[] { (byte)(cut ? 2 : 5), 0, 0, 0 }; | 
						|
                memo.Write(bytes, 0, bytes.Length); | 
						|
                data.SetData("PreferredDropEffect", memo); | 
						|
                Clipboard.SetDataObject(data, false); | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                throw ex; | 
						|
            } | 
						|
        } | 
						|
 | 
						|
        #region 文件处理 | 
						|
        /// <summary> | 
						|
        /// 文件夹复制 | 
						|
        /// </summary> | 
						|
        /// <param name="sourceDir">原文件夹</param> | 
						|
        /// <param name="targetDirPath">目标目录</param> | 
						|
        /// <returns>是否成功复制</returns> | 
						|
        public static bool DirectoryCopy(string sourceDir, string targetDirPath) | 
						|
        { | 
						|
            try | 
						|
            { | 
						|
                if (!System.IO.Directory.Exists(sourceDir)) | 
						|
                { | 
						|
                    return false; | 
						|
                } | 
						|
                string targetDir = targetDirPath + "\\" + System.IO.Path.GetFileName(sourceDir); | 
						|
                if (!System.IO.Directory.Exists(targetDir)) | 
						|
                { | 
						|
                    System.IO.Directory.CreateDirectory(targetDir); | 
						|
                } | 
						|
                // 文件及文件夹名称数组 | 
						|
                string[] dirColl = System.IO.Directory.GetDirectories(sourceDir); | 
						|
                string[] fileColl = System.IO.Directory.GetFiles(sourceDir); | 
						|
                // 便利所有文件 | 
						|
                if (fileColl.Length > 0) | 
						|
                { | 
						|
                    string fileName; | 
						|
                    foreach (string fileDir in fileColl) | 
						|
                    { | 
						|
                        fileName = System.IO.Path.GetFileName(fileDir); | 
						|
                        System.IO.File.Copy(sourceDir + "\\" + fileName, targetDir + "\\" + fileName, true); | 
						|
                    } | 
						|
                } | 
						|
                // 遍历所有文件夹 | 
						|
                if (dirColl.Length > 0) | 
						|
                { | 
						|
                    string folderName; | 
						|
                    foreach (string dir in dirColl) | 
						|
                    { | 
						|
                        folderName = System.IO.Path.GetFileName(dir); | 
						|
                        // 递归调用 | 
						|
                        System.IO.Directory.CreateDirectory(targetDir + "\\" + folderName); | 
						|
                        DirectoryCopy(dir, targetDir + "\\" + folderName); | 
						|
                    } | 
						|
                } | 
						|
                return true; | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                throw ex; | 
						|
            } | 
						|
        } | 
						|
 | 
						|
        /// <summary> | 
						|
        /// 清空文件夹(文件占用不处理) | 
						|
        /// </summary> | 
						|
        /// <param name="srcPath"></param> | 
						|
        public static void DelectDir(string srcPath) | 
						|
        { | 
						|
            try | 
						|
            { | 
						|
                if (!Directory.Exists(srcPath)) | 
						|
                    Directory.CreateDirectory(srcPath); | 
						|
                DirectoryInfo dir = new DirectoryInfo(srcPath); | 
						|
                FileSystemInfo[] fileinfo = dir.GetFileSystemInfos();  //返回目录中所有文件和子目录 | 
						|
                foreach (FileSystemInfo i in fileinfo) | 
						|
                { | 
						|
                    if (i is DirectoryInfo)            //判断是否文件夹 | 
						|
                    { | 
						|
                        DirectoryInfo subdir = new DirectoryInfo(i.FullName); | 
						|
                        subdir.Delete(true);          //删除子目录和文件 | 
						|
                    } | 
						|
                    else | 
						|
                    { | 
						|
                        File.Delete(i.FullName);      //删除指定文件 | 
						|
                    } | 
						|
                } | 
						|
            } | 
						|
            catch (Exception) | 
						|
            { } | 
						|
        } | 
						|
 | 
						|
        /// <summary> | 
						|
        /// 设置文件夹以及文件夹下文件为只读或非只读 | 
						|
        /// </summary> | 
						|
        /// <param name="folderPath"></param> | 
						|
        public static void SetFolderReadOnly(string folderPath, bool readOnly = true) | 
						|
        { | 
						|
            try | 
						|
            { | 
						|
                SetSubFolderReadOnly(folderPath, readOnly); | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                LogAPI.Debug("设置文件夹以及文件夹下文件为只读或非只读" + ex); | 
						|
                throw ex; | 
						|
            } | 
						|
        } | 
						|
 | 
						|
        /// <summary> | 
						|
        /// 递归设置文件夹及文件夹下所有文件权限 | 
						|
        /// </summary> | 
						|
        /// <param name="folderPath"></param> | 
						|
        /// <param name="readOnly"></param> | 
						|
        private static void SetSubFolderReadOnly(string folderPath, bool readOnly = true) | 
						|
        { | 
						|
            try | 
						|
            { | 
						|
                System.IO.DirectoryInfo DirInfo = new DirectoryInfo(folderPath); | 
						|
                System.IO.DirectoryInfo[] directoryInfos = DirInfo.GetDirectories(); | 
						|
                if (directoryInfos != null && directoryInfos.Length > 0) | 
						|
                { | 
						|
                    foreach (var item in directoryInfos) | 
						|
                    { | 
						|
                        SetSubFolderReadOnly(item.FullName, readOnly); | 
						|
                    } | 
						|
                } | 
						|
                FileInfo[] fileInfos = DirInfo.GetFiles(); | 
						|
                if (fileInfos != null && fileInfos.Length > 0) | 
						|
                { | 
						|
                    foreach (var item in fileInfos) | 
						|
                    { | 
						|
                        SetFileReadAccess(item.FullName, readOnly); | 
						|
                    } | 
						|
                } | 
						|
                if (readOnly) | 
						|
                { | 
						|
                    DirInfo.Attributes = FileAttributes.ReadOnly & FileAttributes.Directory; | 
						|
                } | 
						|
                else | 
						|
                { | 
						|
                    DirInfo.Attributes = FileAttributes.Normal & FileAttributes.Directory; | 
						|
                } | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                throw ex; | 
						|
            } | 
						|
        } | 
						|
 | 
						|
        /// <summary> | 
						|
        /// 设置文件只读或非只读 | 
						|
        /// </summary> | 
						|
        /// <param name="FileName"></param> | 
						|
        /// <param name="SetReadOnly"></param> | 
						|
        public static void SetFileReadAccess(string FileName, bool SetReadOnly = true) //注意这个函数 | 
						|
        { | 
						|
            try | 
						|
            { | 
						|
                FileInfo fInfo = new FileInfo(FileName); | 
						|
                if (fInfo.IsReadOnly != SetReadOnly) | 
						|
                { | 
						|
                    fInfo.IsReadOnly = SetReadOnly; | 
						|
                } | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                throw new Exception("设置文件只读异常:" + ex.Message); | 
						|
            } | 
						|
        } | 
						|
 | 
						|
        /// <summary> | 
						|
        /// 读取text文件内容 | 
						|
        /// </summary> | 
						|
        /// <param name="FilePath">文件路径</param> | 
						|
        /// <returns></returns> | 
						|
        public static string ReadTextFileConten(string FilePath) | 
						|
        { | 
						|
            string content = string.Empty; | 
						|
            try | 
						|
            { | 
						|
                // 创建一个 StreamReader 的实例来读取文件  | 
						|
                // using 语句也能关闭 StreamReader | 
						|
                using (StreamReader sr = new StreamReader(FilePath)) | 
						|
                { | 
						|
                    string line; | 
						|
                    // 从文件读取并显示行,直到文件的末尾  | 
						|
                    while ((line = sr.ReadLine()) != null) | 
						|
                    { | 
						|
                        content += line; | 
						|
                    } | 
						|
                } | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                throw ex; | 
						|
            } | 
						|
            return content; | 
						|
        } | 
						|
 | 
						|
        /// <summary> | 
						|
        /// 拷贝模板gdb文件夹 | 
						|
        /// </summary> | 
						|
        /// <param name="SourcePath"></param> | 
						|
        /// <param name="DestinationPath"></param> | 
						|
        /// <param name="overwriteexisting"></param> | 
						|
        public static void CopyDirectory(string SourcePath, string DestinationPath, bool overwriteexisting) | 
						|
        { | 
						|
            try | 
						|
            { | 
						|
                SourcePath = SourcePath.EndsWith(@"\") ? SourcePath : SourcePath + @"\"; | 
						|
                DestinationPath = DestinationPath.EndsWith(@"\") ? DestinationPath : DestinationPath + @"\"; | 
						|
 | 
						|
                if (Directory.Exists(SourcePath)) | 
						|
                { | 
						|
                    if (Directory.Exists(DestinationPath) == false) | 
						|
                        Directory.CreateDirectory(DestinationPath); | 
						|
 | 
						|
                    foreach (string fls in Directory.GetFiles(SourcePath)) | 
						|
                    { | 
						|
                        FileInfo flinfo = new FileInfo(fls); | 
						|
                        flinfo.CopyTo(DestinationPath + flinfo.Name, overwriteexisting); | 
						|
                    } | 
						|
                    foreach (string drs in Directory.GetDirectories(SourcePath)) | 
						|
                    { | 
						|
                        DirectoryInfo drinfo = new DirectoryInfo(drs); | 
						|
                        CopyDirectory(drs, DestinationPath + drinfo.Name, overwriteexisting); | 
						|
                    } | 
						|
                } | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                throw ex; | 
						|
            } | 
						|
        } | 
						|
        #endregion | 
						|
 | 
						|
        /// <summary> | 
						|
        /// 执行压缩SQLite数据库 | 
						|
        /// </summary> | 
						|
        /// <returns>压缩数据库db路径</returns> | 
						|
        public static void ExecuteZip(string dbPath) | 
						|
        { | 
						|
            IRDBHelper rdbHelper = null; | 
						|
            try | 
						|
            { | 
						|
                rdbHelper = RDBFactory.CreateDbHelper($"{dbPath}{(MapsManager.Instance.CurrProjectInfo as ProjectInfo).Pathpassword}", DatabaseType.SQLite); | 
						|
                rdbHelper.ExecuteNonQueryWithException("VACUUM", System.Data.CommandType.Text); | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                throw new Exception("输出成果压缩db异常:" + ex.Message); | 
						|
            } | 
						|
            finally | 
						|
            { | 
						|
                if (rdbHelper != null) | 
						|
                { | 
						|
                    rdbHelper.DisConnect(); | 
						|
                } | 
						|
            } | 
						|
        } | 
						|
 | 
						|
        /// <summary> | 
						|
        /// 从UserLoginConfig.xml中获取指定key的值 | 
						|
        /// </summary> | 
						|
        /// <param name="key"></param> | 
						|
        /// <returns></returns> | 
						|
        public static string GetAppsetingValueByKey(string key) | 
						|
        { | 
						|
            try | 
						|
            { | 
						|
                System.Xml.XmlDocument doc = new System.Xml.XmlDocument(); | 
						|
                string strPath = SysAppPath.GetConfigPath() + "UserLoginConfig.xml"; | 
						|
                doc.Load(strPath); | 
						|
                System.Xml.XmlNode xmlSysNode = doc.SelectSingleNode("configuration/AppSettings"); | 
						|
                if (xmlSysNode.ChildNodes != null && xmlSysNode.ChildNodes.Count > 0) | 
						|
                { | 
						|
                    foreach (System.Xml.XmlNode node in xmlSysNode.ChildNodes) | 
						|
                    { | 
						|
                        if (node.Attributes["Key"].Value == key) | 
						|
                        { | 
						|
                            return node.Attributes["Value"].Value; | 
						|
                        } | 
						|
                    } | 
						|
                } | 
						|
                return ""; | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                Console.WriteLine(ex.Message); | 
						|
                return ""; | 
						|
            } | 
						|
        } | 
						|
 | 
						|
        /// <summary> | 
						|
        /// 更新配置文件UserLoginConfig.xml值 | 
						|
        /// </summary> | 
						|
        /// <param name="key"></param> | 
						|
        /// <param name="value"></param> | 
						|
        /// <returns></returns> | 
						|
        public static void UpdateAppsettingValueByKey(string key, string value, string XMLName) | 
						|
        { | 
						|
            try | 
						|
            { | 
						|
                XmlDocument doc = new XmlDocument(); | 
						|
                string strPath = SysAppPath.GetConfigPath() + $"{XMLName.Trim()}.xml"; | 
						|
                doc.Load(strPath); | 
						|
                XmlNode xmlSysNode = doc.SelectSingleNode("configuration/AppSettings"); | 
						|
                if (xmlSysNode.ChildNodes != null && xmlSysNode.ChildNodes.Count > 0) | 
						|
                { | 
						|
                    foreach (XmlNode node in xmlSysNode.ChildNodes) | 
						|
                    { | 
						|
                        if (node.Attributes["Key"].Value == key) | 
						|
                        { | 
						|
                            node.Attributes["Value"].Value = value; | 
						|
                            doc.Save(strPath); | 
						|
                            break; | 
						|
                        } | 
						|
                    } | 
						|
                } | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                throw ex; | 
						|
            } | 
						|
        } | 
						|
 | 
						|
        /// <summary> | 
						|
        /// 执行地图工具 | 
						|
        /// </summary> | 
						|
        /// <param name="HandleName">执行功能名</param> | 
						|
        public static void ExeCommandOperation(string HandleName) | 
						|
        { | 
						|
            string CommandID = string.Empty; | 
						|
            string BundleSymbolicName = string.Empty; | 
						|
            switch (HandleName) | 
						|
            { | 
						|
                case "执行结束编辑": | 
						|
                    CommandID = "Kingo.Plugin.EngineEditor.Commands.Commands.ControlsStopEditToolCommand"; | 
						|
                    BundleSymbolicName = "Kingo.Plugin.EngineEditor"; | 
						|
                    break; | 
						|
                case "执行全图": | 
						|
                    CommandID = "Kingo.Plugin.MapView.Commands.ControlsMapFullExtent"; | 
						|
                    BundleSymbolicName = "Kingo.Plugin.MapView"; | 
						|
                    break; | 
						|
                case "执行数据解压": | 
						|
                    CommandID = "Kingo.Plugin.DTBJK.Commands.CmdDecompressionDB"; | 
						|
                    BundleSymbolicName = "Kingo.Plugin.DTBJK"; | 
						|
                    break; | 
						|
                case "创建变更数据库": | 
						|
                    CommandID = "Kingo.Plugin.BGSetting.Commands.CmdCreateBGDB"; | 
						|
                    BundleSymbolicName = "Kingo.Plugin.BGSetting"; | 
						|
                    break; | 
						|
                default: | 
						|
                    break; | 
						|
            } | 
						|
            ExeCommandIDByBundle(CommandID, BundleSymbolicName); | 
						|
        } | 
						|
 | 
						|
        /// <summary> | 
						|
        /// 执行已执行插件的配置功能(无参) | 
						|
        /// </summary> | 
						|
        /// <param name="CommandID">例如:Kingo.Plugin.MapView.Commands.CmdSaveProject</param> | 
						|
        /// <param name="BundleSymbolicName">例如:Kingo.Plugin.MapView</param> | 
						|
        private static void ExeCommandIDByBundle(string CommandID, string BundleSymbolicName) | 
						|
        { | 
						|
            try | 
						|
            { | 
						|
                if (string.IsNullOrWhiteSpace(CommandID) || string.IsNullOrWhiteSpace(BundleSymbolicName) || UIShell.OSGi.BundleRuntime.Instance == null) | 
						|
                    return; | 
						|
                var bundle = UIShell.OSGi.BundleRuntime.Instance.Framework.Bundles.Find(x => x.SymbolicName.Equals(BundleSymbolicName)); | 
						|
                if (bundle == null) return; | 
						|
                KGIS.Framework.Commands.ICommandManager _CmdManager = UIShell.OSGi.BundleRuntime.Instance.GetFirstOrDefaultService<KGIS.Framework.Commands.ICommandManager>(); | 
						|
                if (_CmdManager != null) | 
						|
                { | 
						|
                    var pCmd = _CmdManager.AddCmd(CommandID, bundle, null); | 
						|
                    if (pCmd is BaseMapMenuCommand) | 
						|
                        KGIS.Framework.Menus.ServicesInvokes.CommandManagerInvoke.ExeCommand(pCmd, null); | 
						|
                    if (pCmd is ESRI.ArcGIS.SystemUI.ICommand) | 
						|
                        (pCmd as ESRI.ArcGIS.SystemUI.ICommand).OnClick(); | 
						|
                    else if (pCmd is KGIS.Framework.Commands.IMenuCommand) | 
						|
                        (pCmd as KGIS.Framework.Commands.IMenuCommand).OnClick(); | 
						|
                } | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                LogAPI.Debug("执行已执行插件的配置功能失败:" + ex); | 
						|
                throw ex; | 
						|
            } | 
						|
        } | 
						|
        public static void InsertSQLiteData(string dbPath, List<string> sqlList) | 
						|
        { | 
						|
            try | 
						|
            { | 
						|
                using (SQLiteConnection conn = new SQLiteConnection("Data Source=" + dbPath)) | 
						|
                { | 
						|
                    conn.Open(); | 
						|
                    using (SQLiteTransaction pTrans = conn.BeginTransaction()) | 
						|
                    { | 
						|
                        using (SQLiteCommand cmd = new SQLiteCommand(conn)) | 
						|
                        { | 
						|
                            for (int i = 0; i < sqlList.Count(); i++) | 
						|
                            { | 
						|
                                cmd.CommandText = sqlList[i]; | 
						|
                                cmd.ExecuteNonQuery(); | 
						|
                            } | 
						|
                            pTrans.Commit(); | 
						|
                        } | 
						|
                    } | 
						|
                    conn.Close(); | 
						|
                } | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                LogAPI.Debug("批量插入SQLite数据(地址:" + dbPath + ") 执行失败,异常原因: " + ex.Message + " ; "); | 
						|
                return; | 
						|
            } | 
						|
        } | 
						|
 | 
						|
        /// <summary> | 
						|
        /// 记录错误日志信息 | 
						|
        /// </summary> | 
						|
        /// <param name="LogInfo"></param> | 
						|
        /// <param name="ex"></param> | 
						|
        public static void RecordsErrLog(string LogInfo, Exception ex) | 
						|
        { | 
						|
            LogAPI.Debug($"{LogInfo},异常信息如下所示:"); | 
						|
            LogAPI.Debug($"**************************"); | 
						|
            LogAPI.Debug($"{ex}"); | 
						|
            LogAPI.Debug($"**************************"); | 
						|
            LogAPI.Debug($"{LogInfo},异常信息结束!:"); | 
						|
        } | 
						|
        public static string CreateTempDB(string pType, string pSubType = "") | 
						|
        { | 
						|
            string result = string.Empty; | 
						|
            try | 
						|
            { | 
						|
                string dbPath = Path.Combine(Directory.GetCurrentDirectory(), "Temp" + ".db"); | 
						|
                string gdbFolder = Directory.GetCurrentDirectory() + "\\Temp\\" + pType; | 
						|
                if (!Directory.Exists(gdbFolder)) | 
						|
                    Directory.CreateDirectory(gdbFolder); | 
						|
                try | 
						|
                { | 
						|
                    DelectDir(gdbFolder); | 
						|
                } | 
						|
                catch | 
						|
                { | 
						|
                    //删除临时数据异常 不做处理  | 
						|
                } | 
						|
                string gdbFileName = DateTime.Now.ToString("yyyyMMddHHmmssfff"); | 
						|
                string path = System.IO.Path.Combine(gdbFolder, string.IsNullOrWhiteSpace(pSubType) ? gdbFileName : pSubType); | 
						|
                if (!Directory.Exists(path)) | 
						|
                { | 
						|
                    Directory.CreateDirectory(path); | 
						|
                } | 
						|
                string savePath = Path.Combine(path, "TempGDB.gdb"); | 
						|
                string templeteGDBPath = Path.Combine(SysAppPath.GetCurrentAppPath(), "Template", "TempGDB.gdb"); | 
						|
                CopyDirectory(templeteGDBPath, savePath, true); | 
						|
                if (File.Exists(dbPath)) | 
						|
                { | 
						|
                    File.Copy(dbPath, Path.Combine(path, "Temp" + ".sqlite")); | 
						|
                } | 
						|
                else | 
						|
                { | 
						|
                    Console.WriteLine(string.Format("文件{0}不存在!", dbPath)); | 
						|
                } | 
						|
                result = path; | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                Console.WriteLine("创建临时数据库失败!" + ex.Message); | 
						|
                throw ex; | 
						|
            } | 
						|
            return result; | 
						|
        } | 
						|
 | 
						|
        #region CreateTempGDB | 
						|
        /// <summary> | 
						|
        /// 创建临时GDB文件 | 
						|
        /// </summary> | 
						|
        /// <param name="DefinedName">自定义数据库名称</param> | 
						|
        /// <param name="SpecifiedPath">指定目录名称</param> | 
						|
        /// <returns></returns> | 
						|
        public static string CreateTempGDB(string DefinedName, string SpecifiedPath) | 
						|
        { | 
						|
            try | 
						|
            { | 
						|
                string gdbFileName = DateTime.Now.ToString("yyyyMMddHHmmssfff"); | 
						|
                string resultPath = Path.Combine(SpecifiedPath, gdbFileName); | 
						|
                if (!Directory.Exists(resultPath)) | 
						|
                    Directory.CreateDirectory(resultPath); | 
						|
                string savePath = Path.Combine(resultPath, $"{DefinedName}.gdb"); | 
						|
                string templeteGDBPath = Path.Combine(SysAppPath.GetCurrentAppPath(), "Template", "TempGDB.gdb"); | 
						|
                CopyDirectory(templeteGDBPath, savePath, true); | 
						|
                return savePath; | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                LogAPI.Debug("创建临时GDB文件异常:" + ex.Message + ex.StackTrace); | 
						|
                throw ex; | 
						|
            } | 
						|
        } | 
						|
 | 
						|
        /// <summary> | 
						|
        /// 创建临时GDB文件 | 
						|
        /// </summary> | 
						|
        /// <param name="DefinedPath">自定义数据库上级目录名称</param> | 
						|
        /// <returns></returns> | 
						|
        public static string CreateTempGDB(string DefinedPath, ref string DefinedPathDir) | 
						|
        { | 
						|
            string savePath; | 
						|
            try | 
						|
            { | 
						|
                string gdbFileName = DateTime.Now.ToString("yyyyMMddHHmmssfff"); | 
						|
                string resultPath = Path.Combine(SysAppPath.GetCurrentAppPath(), $"Temp\\{DefinedPath}", gdbFileName); | 
						|
                if (!Directory.Exists(resultPath)) | 
						|
                    Directory.CreateDirectory(resultPath); | 
						|
                DefinedPathDir = resultPath; | 
						|
                if (Directory.Exists(Path.Combine(SysAppPath.GetCurrentAppPath(), $"Temp\\{DefinedPath}"))) | 
						|
                    DelectDir(Path.Combine(SysAppPath.GetCurrentAppPath(), $"Temp\\{DefinedPath}")); | 
						|
                savePath = Path.Combine(resultPath, "TempGDB.gdb"); | 
						|
                string templeteGDBPath = Path.Combine(SysAppPath.GetCurrentAppPath(), "Template", "TempGDB.gdb"); | 
						|
                CopyDirectory(templeteGDBPath, savePath, true); | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                LogAPI.Debug("创建临时GDB文件异常:" + ex.Message + ex.StackTrace); | 
						|
                throw ex; | 
						|
            } | 
						|
            return savePath; | 
						|
        } | 
						|
 | 
						|
        public static string CreateTempGDB(string DefinedPath) | 
						|
        { | 
						|
            string savePath = string.Empty; | 
						|
            try | 
						|
            { | 
						|
                string gdbFileName = DateTime.Now.ToString("yyyyMMddHHmmssfff"); | 
						|
                string resultPath = Path.Combine(SysAppPath.GetCurrentAppPath(), $"Temp\\{DefinedPath}", gdbFileName); | 
						|
                if (!Directory.Exists(resultPath)) | 
						|
                    Directory.CreateDirectory(resultPath); | 
						|
                if (Directory.Exists(Path.Combine(SysAppPath.GetCurrentAppPath(), $"Temp\\{DefinedPath}"))) | 
						|
                    DelectDir(Path.Combine(SysAppPath.GetCurrentAppPath(), $"Temp\\{DefinedPath}")); | 
						|
                savePath = Path.Combine(resultPath, "TempGDB.gdb"); | 
						|
                string templeteGDBPath = Path.Combine(SysAppPath.GetCurrentAppPath(), "Template", "TempGDB.gdb"); | 
						|
                CopyDirectory(templeteGDBPath, savePath, true); | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                LogAPI.Debug("创建临时GDB文件异常:" + ex.Message + ex.StackTrace); | 
						|
                throw ex; | 
						|
            } | 
						|
            return savePath; | 
						|
        } | 
						|
        #endregion | 
						|
 | 
						|
        /// <summary> | 
						|
        /// 区划代码_名称(330110_余杭区) | 
						|
        /// </summary> | 
						|
        /// <returns></returns> | 
						|
        public static string GetXZQCode_Name(string TempBSMCode) | 
						|
        { | 
						|
            IRDBHelper rdbHelper = null; | 
						|
            try | 
						|
            { | 
						|
                string systemPath = SysAppPath.GetDataBasePath() + "System.mdb"; | 
						|
                if (File.Exists(systemPath)) | 
						|
                { | 
						|
                    string connStr = ConfigurationManager.AppSettings.Get("MDBOledbConnection");// SysConfigsOprator.GetDBConnectionByName("MDBOledbConnection"); | 
						|
                    connStr = string.Format(connStr, systemPath); | 
						|
                    rdbHelper = RDBFactory.CreateDbHelper(connStr, DatabaseType.MSAccess); | 
						|
                    string strPrWhere = "1=2"; | 
						|
                    string strWhere = string.Empty; | 
						|
                    strWhere += string.Format(" or XZQ LIKE '{0}%'", TempBSMCode.Substring(0, 6)); | 
						|
                    if (!string.IsNullOrWhiteSpace(strWhere)) | 
						|
                        strWhere = strPrWhere + strWhere; | 
						|
                    else | 
						|
                        strWhere = "1=1"; | 
						|
                    string strSQL = "select OBJECTID AS ID, XZQ AS CODE,XZQMC AS NAME from XZQ Where " + strWhere + ""; | 
						|
                    LogAPI.Debug(strWhere); | 
						|
                    DataTable dt = rdbHelper.ExecuteDatatable("Dic", strSQL, true); | 
						|
                    if (dt != null) | 
						|
                    { | 
						|
                        List<DataDicTionary> xzqCoderesult = TBToList.ToList<DataDicTionary>(dt); | 
						|
                        foreach (var item in xzqCoderesult) | 
						|
                        { | 
						|
                            return item.CODE + "_" + item.NAME; | 
						|
                        } | 
						|
                    } | 
						|
                } | 
						|
                return ""; | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                LogAPI.Debug(ex); | 
						|
                return ""; | 
						|
            } | 
						|
            finally | 
						|
            { | 
						|
                rdbHelper?.DisConnect(); | 
						|
            } | 
						|
        } | 
						|
 | 
						|
        /// <summary> | 
						|
        ///为文件夹添加users,everyone,Administrator用户组的完全控制权限 | 
						|
        /// </summary> | 
						|
        /// <param name="dirPath"></param> | 
						|
        public static void AddSecurityControll2Folder(string dirPath) | 
						|
        { | 
						|
            //获取文件夹信息 | 
						|
            DirectoryInfo dir = new DirectoryInfo(dirPath); | 
						|
            //获得该文件夹的所有访问权限 | 
						|
            System.Security.AccessControl.DirectorySecurity dirSecurity = dir.GetAccessControl(AccessControlSections.All); | 
						|
            //设定文件ACL继承 | 
						|
            InheritanceFlags inherits = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit; | 
						|
            //添加ereryone用户组的访问权限规则 完全控制权限 | 
						|
            FileSystemAccessRule everyoneFileSystemAccessRule = new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, inherits, PropagationFlags.None, AccessControlType.Allow); | 
						|
            //添加Users用户组的访问权限规则 完全控制权限 | 
						|
            FileSystemAccessRule usersFileSystemAccessRule = new FileSystemAccessRule("Users", FileSystemRights.FullControl, inherits, PropagationFlags.None, AccessControlType.Allow); | 
						|
            //添加Administrator用户组的访问权限规则 完全控制权限 | 
						|
            FileSystemAccessRule AdministratorFileSystemAccessRule = new FileSystemAccessRule("Administrator", FileSystemRights.FullControl, inherits, PropagationFlags.None, AccessControlType.Allow); | 
						|
            bool isModified = false; | 
						|
            dirSecurity.ModifyAccessRule(AccessControlModification.Add, everyoneFileSystemAccessRule, out isModified); | 
						|
            dirSecurity.ModifyAccessRule(AccessControlModification.Add, usersFileSystemAccessRule, out isModified); | 
						|
            //设置访问权限 | 
						|
            dir.SetAccessControl(dirSecurity); | 
						|
        } | 
						|
    } | 
						|
 | 
						|
    public enum EnumCopyType | 
						|
    { | 
						|
        enumText = 1, | 
						|
        enumFiles = 2 | 
						|
    } | 
						|
}
 | 
						|
 |