示例#1
0
 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);
     }
 }
示例#2
0
        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);
        }
示例#3
0
        /// <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
            }
        }
示例#5
0
        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();
            }
        }
示例#6
0
        /// <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;
            }
        }
示例#7
0
        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
            }
        }