public override void OnClick() { Exception eError = null; FolderBrowserDialog pFolderBrowserDialog = new FolderBrowserDialog(); if (pFolderBrowserDialog.ShowDialog() == DialogResult.OK) { ///获得树图上选择的工程节点 #region 获得工程树图上的参数信息 ///获得树图上选择的工程节点 //cyf 20110626 modify DevComponents.AdvTree.Node pCurNode = m_Hook.ProjectTree.SelectedNode; //当前树节点,栅格数据节点 DevComponents.AdvTree.Node pDBProNode = m_Hook.ProjectTree.SelectedNode; //获得工程树图节点 while (pDBProNode.Parent != null) { pDBProNode = pDBProNode.Parent; } if (pDBProNode.DataKeyString != "project") { SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", "获取工程树图节点失败!"); return; } //end //cyf 20110609 modify: //string pProjectname = pCurNode.Name; string pProjectname = pDBProNode.Text; //end System.Xml.XmlNode Projectnode = m_Hook.DBXmlDocument.SelectSingleNode("工程管理/工程[@名称='" + pProjectname + "']"); //cyf if (Projectnode == null) { return; } //end //cyf 20110626 modify:获取栅格数据图层的存储类型 //获得栅格数据库类型 //System.Xml.XmlElement DbTypeElem = Projectnode.SelectSingleNode(".//内容//栅格数据库") as System.Xml.XmlElement; //string dbType = DbTypeElem.GetAttribute("存储类型"); //栅格编目、栅格数据集 XmlElement pCurElem = null; //图层xml节点 try { pCurElem = pCurNode.Tag as XmlElement; } catch { } if (pCurElem == null) { SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", "获取图层xml节点失败!"); return; } string dbType = pCurElem.GetAttribute("存储类型").Trim(); //栅格数据存储类型 string pDesRasterCollName = pCurElem.GetAttribute("名称").Trim(); //栅格数据名称 //获得栅格目录,栅格数据集名称 //System.Xml.XmlElement DbcataLogNameElem = Projectnode.SelectSingleNode(".//栅格数据库/连接信息/库体") as System.Xml.XmlElement; //if (DbcataLogNameElem == null) return; //string pDesRasterCollName = DbcataLogNameElem.GetAttribute("名称"); //栅格数据名称 //if (pDesRasterCollName == "") return; //end //获得连接信息 System.Xml.XmlElement DbConnElem = Projectnode.SelectSingleNode(".//栅格数据库/连接信息") as System.Xml.XmlElement; string pType = DbConnElem.GetAttribute("类型"); string pServer = DbConnElem.GetAttribute("服务器"); string pInstance = DbConnElem.GetAttribute("服务名"); string pDataBase = DbConnElem.GetAttribute("数据库"); string pUser = DbConnElem.GetAttribute("用户"); string pPassword = DbConnElem.GetAttribute("密码"); string pVersion = DbConnElem.GetAttribute("版本"); //cyf 20110609 add string pConnectInfo = ""; //连接信息字符串 pConnectInfo = pType + "," + pServer + "," + pInstance + "," + pDataBase + "," + pUser + "," + pPassword + "," + pVersion; //end #endregion #region 设置数据库连接信息 SysCommon.Gis.SysGisDataSet pSysDt = new SysCommon.Gis.SysGisDataSet(); if (pType.ToUpper() == "PDB") { pSysDt.SetWorkspace(pDataBase, SysCommon.enumWSType.PDB, out eError); } else if (pType.ToUpper() == "GDB") { pSysDt.SetWorkspace(pDataBase, SysCommon.enumWSType.GDB, out eError); } else if (pType.ToUpper() == "SDE") { pSysDt.SetWorkspace(pServer, pInstance, "", pUser, pPassword, pVersion, out eError); pDesRasterCollName = pUser + "." + pDesRasterCollName; } if (eError != null) { SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", "连接数据库失败!"); return; } #endregion //cyf 20110609 add:读取栅格数据入库日志, #region 检查是否存在已经入库的数据 SysCommon.DataBase.SysTable pSysTable = null; Dictionary <string, string> DicbeInDb = new Dictionary <string, string>(); //用来已经入库的栅格数据的源路径和目标连接信息 if (File.Exists(ModData.RasterInDBLog)) { //若存在栅格数据入库日志,则将入库过的数据的路径保存起来 pSysTable = new SysCommon.DataBase.SysTable(); pSysTable.SetDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ModData.RasterInDBLog + ";Persist Security Info=True", SysCommon.enumDBConType.OLEDB, SysCommon.enumDBType.ACCESS, out eError); if (eError != null) { SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", "连接栅格入库日志表失败!"); return; } //获得栅格入库日志表 DataTable pTable = pSysTable.GetTable("rasterfileinfo", out eError); if (eError != null) { SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", "获取栅格入库日志表失败!"); pSysTable.CloseDbConnection(); return; } for (int i = 0; i < pTable.Rows.Count; i++) { string pFileName = pTable.Rows[i][0].ToString(); string pDesPath = pTable.Rows[i][2].ToString(); if (!DicbeInDb.ContainsKey(pFileName)) { DicbeInDb.Add(pFileName, pDesPath); } } //关闭连接 pSysTable.CloseDbConnection(); //cyf 20110610 modify if (pTable.Rows.Count > 0) { //存在已经入库的数据 RasterErrInfoFrm pRasterErrInfoFrm = new RasterErrInfoFrm(pTable); if (pRasterErrInfoFrm.ShowDialog() != DialogResult.OK) { //若不继续入库,则返回 return; } } //end } #endregion //end //cyf 20110609 //连接栅格数据入库日志表 if (!File.Exists(ModData.RasterInDBLog)) { if (File.Exists(ModData.RasterInDBTemp)) { File.Copy(ModData.RasterInDBTemp, ModData.RasterInDBLog); } SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", "没有找到日志表模板:" + ModData.RasterInDBTemp); return; } pSysTable = new SysCommon.DataBase.SysTable(); pSysTable.SetDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ModData.RasterInDBLog + ";Persist Security Info=True", SysCommon.enumDBConType.OLEDB, SysCommon.enumDBType.ACCESS, out eError); if (eError != null) { SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", "连接栅格入库日志表失败!"); return; } //获得文件夹下面所有的子文件 string pRootFile = pFolderBrowserDialog.SelectedPath;// 选择的文件夹路径 DirectoryInfo pDirectoryInfo = new DirectoryInfo(pRootFile); //FileInfo[] pFileInfoArr = pDirectoryInfo.GetFiles("*.tif", SearchOption.AllDirectories); FileInfo[] pFileInfoArr = pDirectoryInfo.GetFiles("*.*", SearchOption.AllDirectories); //添加进度条 if (pAppFormRef.ProgressBar != null) { pAppFormRef.ProgressBar.Visible = true; pAppFormRef.ProgressBar.Maximum = pFileInfoArr.Length; pAppFormRef.ProgressBar.Minimum = 0; pAppFormRef.ProgressBar.Value = 0; Application.DoEvents(); } //end for (int i = 0; i < pFileInfoArr.Length; i++) { FileInfo pFileInfo = pFileInfoArr[i]; string pFileName = pFileInfo.FullName; //文件名 if (!pFileName.ToLower().EndsWith("tif") && !pFileName.ToLower().EndsWith("img")) { //如果不是TIF文件和IMG文件则不参与检查 //进度条加1 if (pAppFormRef.ProgressBar != null) { pAppFormRef.ProgressBar.Value++; Application.DoEvents(); } continue; } //cyf 20110609 add:对入库过的数据进行判断和筛选 if (DicbeInDb.ContainsKey(pFileName)) { //已经进行入库 if (DicbeInDb[pFileName] == pConnectInfo) { //如果源的路径与目标的路径都相同,则说明已经入库了 //进度条加1 if (pAppFormRef.ProgressBar != null) { pAppFormRef.ProgressBar.Value++; Application.DoEvents(); } continue; } } //end //cyf 20110610 add:文字提示 if (pAppFormRef != null) { pAppFormRef.OperatorTips = "正在进行数据" + pFileName + "入库..."; Application.DoEvents(); } //end //cyf 20110610 adds string Starime = DateTime.Now.ToLongDateString() + " " + DateTime.Now.ToLongTimeString(); //开始时间 //end //进行数据入库 string fileFullName = pFileName; if (dbType == "栅格数据集") { //栅格数据集入库 InputRasterDataset(pDesRasterCollName, fileFullName, pSysDt.WorkSpace, out eError); } else if (dbType == "栅格编目") { //栅格编目数据入库 InputRasterCatalogData(pDesRasterCollName, fileFullName, pSysDt.WorkSpace, out eError); } if (eError != null) { SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("错误", "栅格数据入库出错!\n" + eError.Message); return; } //若入库成功,则将入库成功的数据添加到栅格数据日志表中 //cyf 20110609 插入栅格数据日志表中 string insertStr = "insert into rasterfileinfo values('" + pFileName + "','" + Starime + "','" + DateTime.Now.ToLongDateString() + " " + DateTime.Now.ToLongTimeString() + "','" + pConnectInfo + "')"; pSysTable.UpdateTable(insertStr, out eError); if (eError != null) { SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", "插入栅格入库日志表失败!"); continue; } //进度条加1 if (pAppFormRef.ProgressBar != null) { pAppFormRef.ProgressBar.Value++; Application.DoEvents(); } //end } //cyf 20110609 add: //关闭连接 pSysTable.CloseDbConnection(); //end //if (dbType == "栅格编目") //{ // InputRasterCatalogData(pDesRasterCollName, fileList, pSysDt.WorkSpace, out eError); //} SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", "栅格数据入库完成!"); //cyf 20110609 add if (pAppFormRef.ProgressBar != null) { pAppFormRef.ProgressBar.Visible = false; //cyf 20110610 add:清空文字提示 pAppFormRef.OperatorTips = ""; //end } //end //cyf 20110610 add:栅格正常结束的日志 if (File.Exists(ModData.RasterInDBLog)) { File.Delete(ModData.RasterInDBLog); } //end } }
public override void OnClick() { Exception eError = null; OpenFileDialog OpenFile = new OpenFileDialog(); OpenFile.CheckFileExists = true; OpenFile.CheckPathExists = true; OpenFile.Title = "选择栅格数据"; OpenFile.Filter = "tif数据(*.tif)|*.tif|img数据(*.img)|*.img"; OpenFile.Multiselect = true; if (OpenFile.ShowDialog() == DialogResult.OK) { string[] fileArr = OpenFile.FileNames; ///获得树图上选择的工程节点 //cyf 20110626 modify DevComponents.AdvTree.Node pCurNode = m_Hook.ProjectTree.SelectedNode; //当前树节点,栅格数据节点 DevComponents.AdvTree.Node pDBProNode = m_Hook.ProjectTree.SelectedNode; //获得工程树图节点 while (pDBProNode.Parent != null) { pDBProNode = pDBProNode.Parent; } if (pDBProNode.DataKeyString != "project") { SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", "获取工程树图节点失败!"); return; } //end //cyf 20110609 modify: //string pProjectname = pCurNode.Name; string pProjectname = pDBProNode.Text; //end System.Xml.XmlNode Projectnode = m_Hook.DBXmlDocument.SelectSingleNode("工程管理/工程[@名称='" + pProjectname + "']"); //cyf if (Projectnode == null) { return; } //end //cyf 20110626 modify:获取栅格数据图层的存储类型 //获得栅格数据库类型 //System.Xml.XmlElement DbTypeElem = Projectnode.SelectSingleNode(".//内容//栅格数据库") as System.Xml.XmlElement; //string dbType = DbTypeElem.GetAttribute("存储类型"); //栅格编目、栅格数据集 XmlElement pCurElem = null; //图层xml节点 try { pCurElem = pCurNode.Tag as XmlElement; } catch { } if (pCurElem == null) { SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", "获取图层xml节点失败!"); return; } string dbType = pCurElem.GetAttribute("存储类型").Trim(); //栅格数据存储类型 string pDesRasterCollName = pCurElem.GetAttribute("名称").Trim(); //栅格数据名称 //获得栅格目录,栅格数据集名称 //System.Xml.XmlElement DbcataLogNameElem = Projectnode.SelectSingleNode(".//栅格数据库/连接信息/库体") as System.Xml.XmlElement; //if (DbcataLogNameElem == null) return; //string pDesRasterCollName = DbcataLogNameElem.GetAttribute("名称"); //栅格数据名称 //if (pDesRasterCollName == "") return; //end //获得连接信息 System.Xml.XmlElement DbConnElem = Projectnode.SelectSingleNode(".//栅格数据库/连接信息") as System.Xml.XmlElement; string pType = DbConnElem.GetAttribute("类型"); string pServer = DbConnElem.GetAttribute("服务器"); string pInstance = DbConnElem.GetAttribute("服务名"); string pDataBase = DbConnElem.GetAttribute("数据库"); string pUser = DbConnElem.GetAttribute("用户"); string pPassword = DbConnElem.GetAttribute("密码"); string pVersion = DbConnElem.GetAttribute("版本"); //cyf 20110609 add string pConnectInfo = ""; //连接信息字符串 pConnectInfo = pType + "|" + pServer + "|" + pInstance + "|" + pDataBase + "|" + pUser + "|" + pPassword + "|" + pVersion; //end //获得目标数据库的参数 //System.Xml.XmlElement DbParaElem = Projectnode.SelectSingleNode(".//栅格数据库/参数设置") as System.Xml.XmlElement; //string resampleTypeStr = DbParaElem.GetAttribute("重采样类型"); //string compressionTypeStr = DbParaElem.GetAttribute("压缩类型"); //string pyramid = DbParaElem.GetAttribute("金字塔"); //string tileH = DbParaElem.GetAttribute("瓦片高度"); //string tileW = DbParaElem.GetAttribute("瓦片宽度"); //string bandNum = DbParaElem.GetAttribute("波段"); //rstResamplingTypes resampleType = GetResampleTpe(resampleTypeStr); //esriRasterCompressionType compressionType = GetCompression(compressionTypeStr); //if (tileH == "") //{ // tileH = "128"; //} //if (tileW == "") //{ // tileW = "128"; //} //if (pyramid == "") //{ // pyramid = "6"; //} //设置数据库连接信息 SysCommon.Gis.SysGisDataSet pSysDt = new SysCommon.Gis.SysGisDataSet(); if (pType.ToUpper() == "PDB") { pSysDt.SetWorkspace(pDataBase, SysCommon.enumWSType.PDB, out eError); } else if (pType.ToUpper() == "GDB") { pSysDt.SetWorkspace(pDataBase, SysCommon.enumWSType.GDB, out eError); } else if (pType.ToUpper() == "SDE") { pSysDt.SetWorkspace(pServer, pInstance, "", pUser, pPassword, pVersion, out eError); pDesRasterCollName = pUser + "." + pDesRasterCollName; } if (eError != null) { SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", "连接数据库失败!"); return; } //Thread aThread = null; //cyf 20110609 add:读取栅格数据入库日志,检查是否存在已经入库的数据 SysCommon.DataBase.SysTable pSysTable = null; Dictionary <string, string> DicbeInDb = new Dictionary <string, string>(); //用来已经入库的栅格数据的源路径和目标连接信息 if (File.Exists(ModData.RasterInDBLog)) { //若存在栅格数据入库日志,则将入库过的数据的路径保存起来 pSysTable = new SysCommon.DataBase.SysTable(); pSysTable.SetDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ModData.RasterInDBLog + ";Persist Security Info=True", SysCommon.enumDBConType.OLEDB, SysCommon.enumDBType.ACCESS, out eError); if (eError != null) { SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", "连接栅格入库日志表失败!"); return; } //获得栅格入库日志表 DataTable pTable = pSysTable.GetTable("rasterfileinfo", out eError); if (eError != null) { SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", "获取栅格入库日志表失败!"); pSysTable.CloseDbConnection(); return; } for (int i = 0; i < pTable.Rows.Count; i++) { string pFileName = pTable.Rows[i][0].ToString(); string pDesPath = pTable.Rows[i][3].ToString(); if (!DicbeInDb.ContainsKey(pFileName)) { DicbeInDb.Add(pFileName, pDesPath); } } //关闭连接 pSysTable.CloseDbConnection(); //cyf 20110610 modify if (pTable.Rows.Count > 0) { //存在已经入库的数据 RasterErrInfoFrm pRasterErrInfoFrm = new RasterErrInfoFrm(pTable); if (pRasterErrInfoFrm.ShowDialog() != DialogResult.OK) { //若不继续入库,则返回 return; } } //end } //end ///进行数据入库 //cyf 20110609 //连接栅格数据入库日志表 if (!File.Exists(ModData.RasterInDBLog)) { if (File.Exists(ModData.RasterInDBTemp)) { File.Copy(ModData.RasterInDBTemp, ModData.RasterInDBLog); } SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", "没有找到日志表模板:" + ModData.RasterInDBTemp); return; } pSysTable = new SysCommon.DataBase.SysTable(); pSysTable.SetDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ModData.RasterInDBLog + ";Persist Security Info=True", SysCommon.enumDBConType.OLEDB, SysCommon.enumDBType.ACCESS, out eError); if (eError != null) { SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", "连接栅格入库日志表失败!"); return; } //添加进度条 if (pAppFormRef.ProgressBar != null) { pAppFormRef.ProgressBar.Visible = true; pAppFormRef.ProgressBar.Maximum = fileArr.Length; pAppFormRef.ProgressBar.Minimum = 0; pAppFormRef.ProgressBar.Value = 0; Application.DoEvents(); } //end //List<string> fileList = new List<string>(); //要进行入库的文件名 for (int i = 0; i < fileArr.Length; i++) { //if (!fileList.Contains(fileArr[i])) //{ // fileList.Add(fileArr[i]); //} //cyf 20110609 add:对入库过的数据进行判断和筛选 if (DicbeInDb.ContainsKey(fileArr[i])) { //已经进行入库 if (DicbeInDb[fileArr[i]] == pConnectInfo) { //如果源的路径与目标的路径都相同,则说明已经入库了 //进度条加1 if (pAppFormRef.ProgressBar != null) { pAppFormRef.ProgressBar.Value++; Application.DoEvents(); } continue; } } //end //cyf 20110610 add:文字提示 if (pAppFormRef != null) { pAppFormRef.OperatorTips = "正在进行数据" + fileArr[i] + "入库..."; Application.DoEvents(); } //end //cyf 20110610 adds string Starime = DateTime.Now.ToLongDateString() + " " + DateTime.Now.ToLongTimeString(); //开始时间 //end string fileFullName = fileArr[i]; if (dbType == "栅格数据集") { //栅格数据集入库 InputRasterDataset(pDesRasterCollName, fileFullName, pSysDt.WorkSpace, out eError); } else if (dbType == "栅格编目") { //栅格编目数据入库 InputRasterCatalogData(pDesRasterCollName, fileFullName, pSysDt.WorkSpace, out eError); } if (eError != null) { SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("错误", "栅格数据入库出错!\n" + eError.Message); return; } //若入库成功后,更新则将入库成功的数据添加到栅格数据日志表中 //cyf 20110609 插入栅格数据日志表中 string insertStr = "insert into rasterfileinfo values('" + fileArr[i] + "','" + Starime + "','" + DateTime.Now.ToLongDateString() + " " + DateTime.Now.ToLongTimeString() + "','" + pConnectInfo + "')"; pSysTable.UpdateTable(insertStr, out eError); if (eError != null) { SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", "插入栅格入库日志表失败!"); continue; } //进度条加1 if (pAppFormRef.ProgressBar != null) { pAppFormRef.ProgressBar.Value++; Application.DoEvents(); } //end } //cyf 20110609 add: //关闭连接 pSysTable.CloseDbConnection(); //end //if (dbType == "栅格编目") //{ // InputRasterCatalogData(pDesRasterCollName, fileList, pSysDt.WorkSpace, out eError); //} SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", "栅格数据入库完成!"); //cyf 20110609 add if (pAppFormRef.ProgressBar != null) { pAppFormRef.ProgressBar.Visible = false; //cyf 20110610 add:清空文字提示 pAppFormRef.OperatorTips = ""; //end } //end //cyf 20110610 add:栅格正常结束的日志 if (File.Exists(ModData.RasterInDBLog)) { //File.Delete(ModData.RasterInDBLog); } //end } }