public string GetTableSql(string sTableName, out Exception ex) { if (string.IsNullOrEmpty(this.m_MDBFilePath)) { ex = new Exception("没有指定模板文件"); return(null); } try { string TarGetTableName = sTableName; SysCommon.DataBase.SysTable metaSysTable = new SysCommon.DataBase.SysTable(); metaSysTable.SetDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + this.m_MDBFilePath + ";Persist Security Info=True", SysCommon.enumDBConType.OLEDB, SysCommon.enumDBType.ACCESS, out ex); if (ex != null) { return(null); } DataTable GetTable = metaSysTable.GetTable(TarGetTableName, out ex); if (ex != null) { return(null); } string SQL = GetSQLByTable(GetTable, TarGetTableName, out ex); return(SQL); } catch (Exception eError) { ex = eError; return(null); } }
private Dictionary <string, Type> AddField() { Exception eError = null; Dictionary <string, Type> fieldDic = new Dictionary <string, Type>(); if (ConnStr == "") { return(null); } SysCommon.DataBase.SysTable pSysDB = new SysCommon.DataBase.SysTable(); pSysDB.SetDbConnection(ConnStr, SysCommon.enumDBConType.ORACLE, SysCommon.enumDBType.ORACLE, out eError); if (eError != null) { SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("错误", "连接元数据库失败!"); pSysDB.CloseDbConnection(); return(null); } string pTableName = ""; if (cmbType.Text == "标准图幅") { pTableName = "StandardMapMDTable"; } else if (cmbType.Text == "非标准图幅") { pTableName = "NonstandardMapMDTable"; } else if (cmbType.Text == "控制点数据") { pTableName = "ControlPointMDTable"; } DataTable pTable = pSysDB.GetTable(pTableName, out eError); if (eError != null) { SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("错误", "获取源数据信息表失败!"); pSysDB.CloseDbConnection(); return(null); } pSysDB.CloseDbConnection(); for (int i = 0; i < pTable.Columns.Count; i++) { if (pTable.Columns[i].ColumnName.ToString().Trim() == "ID") { continue; } if (pTable.Columns[i].ColumnName.ToString().Trim() == "图形数据") { continue; } if (!cmbField.Items.Contains(pTable.Columns[i].ColumnName.ToString().Trim())) { cmbField.Items.Add(pTable.Columns[i].ColumnName.ToString().Trim()); fieldDic.Add(pTable.Columns[i].ColumnName.ToString().Trim(), pTable.Columns[i].DataType); } } return(fieldDic); }
/// <summary> /// guozheng 2011-3-24 added 判断是不是第一次登陆(第一次登陆只有系统管理员,将系统管理员账号显示在界面上) /// </summary> private void JudgeInitialize() { Exception outError = null; SysCommon.DataBase.SysTable pSysDB = null; //连接数据库 ModDBOperate.ConnectDB(out pSysDB, out outError); if (outError != null) { SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", "连接Oracle数据库异常:" + outError.Message + "请检查Oracle数据库运行状态"); return; } /////读取用户表,若只有一条记录则认为是系统管理员///// string sSQL = "SELECT * FROM userbaseinfo"; DataTable GetUserTable = pSysDB.GetTable("userbaseinfo", out outError); if (GetUserTable.Rows.Count == 1) { ////////将系统管理员的信息显示在界面上//////// this.txtUser.Text = GetUserTable.Rows[0]["USERNAME"].ToString(); this.txtPassword.Text = GetUserTable.Rows[0]["PASSWORD"].ToString(); } }
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; #region 通过树节点获取源数据库的连接地址 DevComponents.AdvTree.Node DBNode = null; string treeNodeType = m_Hook.ProjectTree.SelectedNode.DataKey.ToString(); if (treeNodeType == "") { return; } DBNode = m_Hook.ProjectTree.SelectedNode;//数据库节点,根节点 while (DBNode.Parent != null) { DBNode = DBNode.Parent; } if (DBNode.DataKey.ToString() != EnumTreeNodeType.DATABASE.ToString()) { return; } if (DBNode.Name != "文件连接") { return; } XmlElement connElem = DBNode.Tag as XmlElement; if (connElem == null) { return; } string conStr = connElem.GetAttribute("MetaDBConn"); #endregion SaveFileDialog saveDial = new SaveFileDialog(); saveDial.Title = "保存数据"; saveDial.Filter = "控制点数据(*.mdb)|*.mdb"; if (saveDial.ShowDialog() == DialogResult.OK) { FrmProcessBar frmbar = new FrmProcessBar(); frmbar.Show(); string pFileName = saveDial.FileName; FileInfo pFileInfo = new FileInfo(ModData.v_TempControlDB); FileInfo desFileInfo = pFileInfo.CopyTo(pFileName, true); //文件存储路径加名称 string path = desFileInfo.DirectoryName; //文件存储路径 //连接目标表 SysCommon.DataBase.SysTable desSysTable = new SysCommon.DataBase.SysTable(); desSysTable.SetDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pFileName + ";Persist Security Info=True", SysCommon.enumDBConType.OLEDB, SysCommon.enumDBType.ACCESS, out eError); if (eError != null) { SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("错误", "连接元数据库失败!\n连接地址为:" + pFileName); desSysTable.CloseDbConnection(); return; } //获得目标表格 DataTable desTable = desSysTable.GetTable("metadata", out eError); if (eError != null) { SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", eError.Message + "在库中不存在表格'metadata',请检查!"); desSysTable.CloseDbConnection(); return; } //insert 语句 string insertStr = "insert into metadata ("; for (int i = 1; i < desTable.Columns.Count; i++) { //第一列为自动编号ID,从第二列开始 insertStr += desTable.Columns[i].ColumnName + ","; } insertStr = insertStr.Substring(0, insertStr.Length - 1) + ")"; insertStr += " values ("; //连接源数据库 SysCommon.DataBase.SysTable pSysTable = new SysCommon.DataBase.SysTable(); ////pSysTable.SetDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + conStr + ";Persist Security Info=True", SysCommon.enumDBConType.OLEDB, SysCommon.enumDBType.ACCESS, out eError); pSysTable.SetDbConnection(conStr, SysCommon.enumDBConType.ORACLE, SysCommon.enumDBType.ORACLE, out eError); if (eError != null) { SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("错误", "连接元数据库失败!\n连接地址为:" + conStr); pSysTable.CloseDbConnection(); desSysTable.CloseDbConnection(); return; } //源数据表格 DataTable ordDt = pSysTable.GetTable("ControlPointMDTable", out eError); if (eError != null) { SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", "查询控制点元信息出错!"); pSysTable.CloseDbConnection(); desSysTable.CloseDbConnection(); return; } pSysTable.CloseDbConnection(); if (desTable.Columns.Count + 5 != ordDt.Columns.Count) { SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", "目标数据库与源数据库字段结构不一致!"); desSysTable.CloseDbConnection(); return; } #region 遍历要导出的数据 //设置进度条最大值 frmbar.SetFrmProcessBarMax(m_Hook.DataInfoGrid.SelectedRows.Count); int pValue = 0; for (int i = 0; i < m_Hook.DataInfoGrid.RowCount; i++) { if (m_Hook.DataInfoGrid.Rows[i].Selected) { string savePath = m_Hook.DataInfoGrid.Rows[i].Cells["存储位置"].FormattedValue.ToString().Trim(); if (!savePath.Contains("控制点数据")) { //其他数据导出 //pValue++; //frmbar.SetFrmProcessBarValue(pValue); continue; } frmbar.SetFrmProcessBarText("正在进行下载数据:" + m_Hook.DataInfoGrid.Rows[i].Cells["数据文件名"].FormattedValue.ToString().Trim()); if (m_Hook.DataInfoGrid.Rows[i].Cells["ID"].FormattedValue.ToString().Trim() == "") { return; } long dataID = Convert.ToInt64(m_Hook.DataInfoGrid.Rows[i].Cells["ID"].FormattedValue.ToString().Trim()); //执行导出操作 OutPutOneRacord(dataID, insertStr, ordDt, desSysTable, path, out eError); if (eError != null) { SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", eError.Message); desSysTable.CloseDbConnection(); frmbar.Dispose(); frmbar.Close(); return; } pValue++; frmbar.SetFrmProcessBarValue(pValue); } } #endregion frmbar.Dispose(); frmbar.Close(); } }
/// <summary> /// 创建元信息库体结构 /// </summary> /// <param name="ex">返回错误信息</param> public void Creat(out Exception ex) { ex = null; if (this.m_DataBaseOper == null) { ex = new Exception("元信息Oracle数据库连接信息未初始化"); return; } string sql = string.Empty; if (!System.IO.File.Exists(ModuleData.v_FTPDbSchameFile)) { ex = new Exception("FTP元信息库模板文件:" + ModuleData.v_FTPDbSchameFile + " 并不存在"); return; } try { SysCommon.DataBase.SysTable metaSysTable = new SysCommon.DataBase.SysTable(); metaSysTable.SetDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ModuleData.v_FTPDbSchameFile + ";Persist Security Info=True", SysCommon.enumDBConType.OLEDB, SysCommon.enumDBType.ACCESS, out ex); if (ex != null) { return; } List <string> TableNames = new List <string>(); TableNames.Add("ControlPointMDTable"); ////////控制点元信息表 TableNames.Add("DataFormatTable"); ////////////数据格式表 TableNames.Add("DataTypeTable"); //////////////数据类型表 TableNames.Add("NonstandardMapMDTable"); //////非标准图幅元信息表 TableNames.Add("ProductIndexTable"); //////////产品索引表 TableNames.Add("ProductMDTable"); /////////////产品元信息表 TableNames.Add("ProjectMDTable"); /////////////项目元信息表 TableNames.Add("StandardMapMDTable"); /////////标准图幅元信息表 this.m_DataBaseOper.StartTransaction(); foreach (string sTable in TableNames) { DataTable GetTable = metaSysTable.GetTable(sTable, out ex); if (ex != null) { return; } string SQL = string.Empty;/////////////在Oracle中建立表的SQL语句 SQL += "CREATE TABLE " + sTable + "("; for (int i = 0; i < GetTable.Columns.Count; i++) { DataColumn GetColumn = GetTable.Columns[i]; string sColumnName = GetColumn.ColumnName; int iColumnLen = GetColumn.MaxLength; if (iColumnLen < 0) { iColumnLen = 100; } if (sColumnName == "存储位置") { iColumnLen = 500; } if (GetColumn.DataType.FullName == "System.String") { SQL += sColumnName; SQL += " VARCHAR2(" + iColumnLen.ToString() + "),"; } else if (GetColumn.DataType.FullName == "System.Decimal" || GetColumn.DataType.FullName == "System.Int32" || GetColumn.DataType.FullName == "System.Int64" || GetColumn.DataType.FullName == "System.Int16") { SQL += sColumnName; SQL += " NUMBER,"; } else if (GetColumn.DataType.FullName == "System.Double" || GetColumn.DataType.FullName == "System.Single") { SQL += sColumnName; SQL += " NUMBER,"; } else if (GetColumn.DataType.FullName == "System.DateTime") { SQL += sColumnName; SQL += " DATE,"; } else if (GetColumn.DataType.FullName == "System.Byte[]") { SQL += sColumnName; SQL += " BLOB,"; } } SQL = SQL.Substring(0, SQL.LastIndexOf(',')); SQL += " )"; if (!m_DataBaseOper.UpdateTable(SQL, out ex)) { ex = new Exception("表:" + sTable + " 创建失败,\n原因:" + ex.Message); this.m_DataBaseOper.EndTransaction(false); return; } } } catch (Exception eError) { ex = eError; return; } try { //////插入数据格式记录,图幅数据类型记录/////////////////////////////////////////////////////////////////// string[] insertsql = new string[4]; insertsql[0] = "INSERT INTO DataFormatTable(数据格式编号,数据格式) VALUES(0,'DLG')"; insertsql[1] = "INSERT INTO DataFormatTable(数据格式编号,数据格式) VALUES(1,'DOM')"; insertsql[2] = "INSERT INTO DataFormatTable(数据格式编号,数据格式) VALUES(2,'DEM')"; insertsql[3] = "INSERT INTO DataFormatTable(数据格式编号,数据格式) VALUES(3,'DRG')"; for (int i = 0; i < insertsql.Length; i++) { this.m_DataBaseOper.UpdateTable(insertsql[i], out ex); if (ex != null) { ex = new Exception("数据格式表初始化失败,\n原因:" + ex.Message); this.m_DataBaseOper.EndTransaction(false); return; } } //////// insertsql = new string[3]; insertsql[0] = "INSERT INTO DataTypeTable(图幅类型编号,图幅类型) VALUES(0,'标准图幅')"; insertsql[1] = "INSERT INTO DataTypeTable(图幅类型编号,图幅类型) VALUES(1,'非标准图幅')"; insertsql[2] = "INSERT INTO DataTypeTable(图幅类型编号,图幅类型) VALUES(2,'属性信息')"; for (int i = 0; i < insertsql.Length; i++) { this.m_DataBaseOper.UpdateTable(insertsql[i], out ex); if (ex != null) { ex = new Exception("图幅类型表初始化失败,\n原因:" + ex.Message); this.m_DataBaseOper.EndTransaction(false); return; } } //////// this.m_DataBaseOper.EndTransaction(true); } catch (Exception eError) { ex = new Exception("成果文件库元信息库初始化失败,\n原因:" + eError.Message); return; } }
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 } }