Newer
Older
EMS_REFACTOR / FrmDataBaseOpt.cs
nn-203 on 26 Jul 2017 17 KB first commit
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.IO;
using System.Windows.Forms;
using System.Xml;
using DevComponents.DotNetBar;
using GeoScene.Engine;
using GeoScene.Globe;

namespace Cyberpipe
{
    public partial class FrmDataBaseOpt : Office2007Form
    {
        public static GSODataSource dsleft;
        public static GSODataSource ds;
        GSOGlobeControl globeControl1;
        GSOGlobeControl globeControl2;
        public static string dbIp = "";
        public static string database = "";
        public static string user = "";
        public static string pass = "";
        public static SqlConnection conn = null;
        public static List<string> listLayerCaption = new List<string>();
        public static List<string> listIpAndDatabase = new List<string>();
        public static string layerIP = "";
        public static string layerDatabase = "";

        MainFrm mainfrm;

        string filenameDbconfig = Application.StartupPath + "\\databaseConfig.xml";
        List<databaseClass> listDb = new List<databaseClass>();
        public FrmDataBaseOpt(GSOGlobeControl ctlleft,GSOGlobeControl ctl)
        {
            InitializeComponent();
            globeControl1 = ctlleft;
            globeControl2 = ctl;

        }
        /// <summary>
        /// 连接按钮事件处理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonOk_Click(object sender, EventArgs e)
        { 
            //右侧右数据库连接
            if (dbCombor.Text != null)
            {
                List<databaseClass> dblist = listDb;
                //找到链接数据库
                databaseClass db = null;
                for (int i = 0; i < dblist.Count; i++) { 
                    databaseClass model =dblist[i];
                    if (model.title == dbCombor.Text.Trim()) {
                        db = new databaseClass();
                        db = model;
                        break;
                    }
                }
                //登陆
                if (db != null)
                {
                    dbIp = db.dbip;
                    database = db.database;
                    user = db.dbuser;
                    pass = db.dbpassword;
                }
                else {
                    MessageBox.Show("填写的数据库名称无效,请重新选择");
                    return;
                }

                /*
                if (!Utility.isNetworkConnectionSuccess(dbIp.Trim()))
                {
                    MessageBox.Show("网络连接失败!", "提示");
                    return;
                }
                */

                ds = globeControl2.Globe.DataManager.OpenOracleDataSource(dbIp + "/" + database, "", "", user, pass);
                if (ds == null)
                {
                    MessageBox.Show("数据库连接失败!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
                //加载到list中
                listBox1.Items.Clear();
                for (int i = 0; i < ds.DatasetCount; i++)
                {
                    GSODataset dataset = ds.GetDatasetAt(i);
                    if (dataset.Name.ToLower().Contains("network"))
                    {
                        continue;
                    }
                    listBox1.Items.Add(dataset.Name);
                }
                //WriteXML();

            }
            else
            {
                MessageBox.Show("请选择要进行对比的数据库!", "提示");
                return;
            }
           
            if (dbCombo.Text != null)
            {
                List<databaseClass> dblist = listDb;
                //找到链接数据库
                databaseClass db = null;
                for (int i = 0; i < dblist.Count; i++)
                {
                    databaseClass model = dblist[i];
                    if (model.title == dbCombo.Text.Trim())
                    {
                        db = new databaseClass();
                        db = model;
                        break;
                    }
                }
                //登陆
                if (db != null)
                {
                    dbIp = db.dbip;
                    database = db.database;
                    user = db.dbuser;
                    pass = db.dbpassword;
                }
                else
                {
                    MessageBox.Show("填写的数据库名称无效,请重新选择");
                    return;
                }

                /*
                if (!Utility.isNetworkConnectionSuccess(dbIp.Trim()))
                {
                    MessageBox.Show("网络连接失败!", "提示");
                    return;
                }*/


                dsleft = globeControl1.Globe.DataManager.OpenOracleDataSource(dbIp + "/" + database, "", "", user, pass);
                if (dsleft == null)
                {
                    MessageBox.Show("数据库连接失败!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
                //加载到list中
                listBox2.Items.Clear();
                for (int i = 0; i < dsleft.DatasetCount; i++)
                {
                    GSODataset dataset = dsleft.GetDatasetAt(i);
                    if (dataset.Name.ToLower().Contains("network"))
                    {
                        continue;
                    }
                    listBox2.Items.Add(dataset.Name);
                }
                //WriteXML();

            } 
            else {
                MessageBox.Show("请选择要进行对比的数据库!", "提示");
                return;
            }

            buttonX1.Enabled = true;
        }
        
        /// <summary>
        /// 确定按钮事件处理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonX1_Click(object sender, EventArgs e)
        {
            //右侧球
            if (listBox1.SelectedItems.Count > 0)
            {
                /*
                if (!Utility.isNetworkConnectionSuccess(dbIp))
                {
                    MessageBox.Show("网络连接失败!", "提示");
                    return;
                }
                 * */

                if (layerIP != "" && layerDatabase != "")
                {
                    if (layerIP != dbIp || layerDatabase != database)
                    {
                        listIpAndDatabase.Add(layerIP);
                        listIpAndDatabase.Add(layerDatabase);
                        layerIP = dbIp;
                        layerDatabase = database;
                        listLayerCaption.Add("--");
                    }
                }
                else
                {
                    layerIP = dbIp;
                    layerDatabase = database;
                }

                for (int i = 0; i < ds.DatasetCount; i++)
                {
                    GSODataset dataset = ds.GetDatasetAt(i);
                    if (dataset != null)
                    {
                        dataset.Caption = dataset.Name;
                        GSOLayer layer = globeControl2.Globe.Layers.Add(dataset);
                        if (layer != null)
                        {
                            layer.MaxVisibleAltitude = 7000;
                            layer.Visible = listBox1.SelectedItems.Contains(dataset.Caption);
                            listLayerCaption.Add(layer.Caption);
                            
                            globeControl2.Globe.Layers.MoveTo(0, globeControl2.Globe.Layers.Count - 1);
                        }
                    }
                }

                globeControl2.Globe.Refresh(); 
            }
            else
            {
                Close();
            }
            //左侧球
            if (listBox2.SelectedItems.Count > 0)
            {
                /*
                if (!Utility.isNetworkConnectionSuccess(dbIp))
                {
                    MessageBox.Show("网络连接失败!", "提示");
                    return;
                }
                 * */

                if (layerIP != "" && layerDatabase != "")
                {
                    if (layerIP != dbIp || layerDatabase != database)
                    {
                        listIpAndDatabase.Add(layerIP);
                        listIpAndDatabase.Add(layerDatabase);
                        layerIP = dbIp;
                        layerDatabase = database;
                        listLayerCaption.Add("--");
                    }
                }
                else
                {
                    layerIP = dbIp;
                    layerDatabase = database;
                }
                //清除已有左侧球的图层 
                for (int i = globeControl1.Globe.Layers.Count - 1; i >= 0; i--)
                {
                    GSOLayer layer = globeControl1.Globe.Layers[i];
                    if (!layer.Name.Contains("fttp:"))
                    {
                        layer.Dataset.Close();//清除内存
                        globeControl1.Globe.Layers.Remove(layer);
                    }
                }

                for (int i = 0; i < dsleft.DatasetCount; i++)
                {
                    GSODataset dataset = dsleft.GetDatasetAt(i);
                    if (dataset != null)
                    {
                        dataset.Caption = dataset.Name;
                        GSOLayer layer = globeControl1.Globe.Layers.Add(dataset);
                        if (layer != null)
                        {
                            layer.MaxVisibleAltitude = 7000;
                            layer.Visible = listBox2.SelectedItems.Contains(dataset.Caption);
                            listLayerCaption.Add(layer.Caption);

                            globeControl1.Globe.Layers.MoveTo(0, globeControl1.Globe.Layers.Count - 1);
                        }
                    }
                }

                globeControl1.Globe.Refresh();
                
            }
            else
            {
                Close();
            }
            Close();
        }
        /// <summary>
        /// 取消按钮事件处理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonX3_Click(object sender, EventArgs e)
        {
         //   mainfrm.btnSpdb_Click(sender, e);  
            Close();
        }
        /// <summary>
        /// 窗体初始化事件处理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void FrmDataBaseOpt_Load(object sender, EventArgs e)
        { 
            mainfrm = (MainFrm)Owner;
            buttonX1.Enabled = false;
            //ReadXML();

            #region 读取 database "databaseConfig.xml"
            if (File.Exists(filenameDbconfig))
            {
                try
                {
                    XmlDocument doc = new XmlDocument();
                    doc.Load(filenameDbconfig);

                    XmlNode xn = doc.SelectSingleNode("Database");
                    // 得到根节点的所有子节点
                    XmlNodeList xnl = xn.ChildNodes;
                    foreach (XmlNode xn1 in xnl)
                    {
                        databaseClass model = new databaseClass();
                        XmlElement xe = (XmlElement)xn1;// 将节点转换为元素,便于得到节点的属性值
                        model.title = xe.GetAttribute("title");
                        // 得到database节点的所有子节点
                        XmlNodeList xnl0 = xe.ChildNodes;
                        model.dbip = xnl0.Item(0).InnerText;
                        model.database = xnl0.Item(1).InnerText;
                        model.dbuser = xnl0.Item(2).InnerText;
                        model.dbpassword = xnl0.Item(3).InnerText;

                        listDb.Add(model);
                    }
                }
                catch (Exception ex)
                {
                    //LogError.PublishError(ex);
                }
            }
            else
            {
                MessageBox.Show("配置文件" + filenameDbconfig + "不存在!", "提示");
            }
            #endregion


            List<databaseClass> dblist = listDb;
            for (int i = 0; i < dblist.Count; i++) {
                dbCombo.Items.Add(dblist[i].title);
                dbCombor.Items.Add(dblist[i].title);
            }
        }
        /// <summary>
        /// 从配置文件读取数据库参数配置
        /// </summary>
        private void ReadXML()
        {
            string strFileName = Application.StartupPath + "/databaseConfigGlobe2.xml";
            if (!File.Exists(strFileName))
            {
                return;
            }

            //初始化XML文档操作类
            XmlDocument myDoc = new XmlDocument();
            {
                //加载XML文件
                try
                {
                    myDoc.Load(strFileName);
                }
                catch (Exception e)
                {
                    LogError.PublishError(e);
                    return;
                }
                //搜索指定的节点
                XmlNode serverRootNode = myDoc.SelectSingleNode("LocaSpace");
                XmlNodeList nodes = null;
                if (serverRootNode != null)
                {
                    nodes = myDoc.SelectSingleNode("LocaSpace").ChildNodes;
                }
                if (nodes != null)
                {
                    XmlNode bRecordNode = serverRootNode.SelectSingleNode("IsRecordedSql");
                    bool bRecorded = false;
                    if (bRecordNode != null)
                    {
                        bool.TryParse(bRecordNode.InnerText, out bRecorded);
                        cbbRecordDatabaseConfig.Checked = bRecorded;
                    }
                    if (bRecorded)
                    {
                        foreach (XmlNode xn in nodes)
                        {
                            if (xn.Name == "sqlIP")
                            {
                                textBoxIP.Text = xn.InnerText;
                            }
                            else if (xn.Name == "database")
                            {
                                textBoxPort.Text = xn.InnerText;
                            }
                            else if (xn.Name == "userName")
                            {
                                textBoxUser.Text = xn.InnerText;
                            }
                            else if (xn.Name == "password")
                            {
                                textBoxPsw.Text = xn.InnerText;
                            }
                        }
                    }
                }

            }
        }
        /// <summary>
        /// 向配置文件写入连接数据库的参数配置
        /// </summary>
        private void WriteXML()
        {
            string strFileName = Application.StartupPath + "/databaseConfigGlobe2.xml";
            File.WriteAllText(strFileName, "<?xml version='1.0' encoding='utf-8' ?><LocaSpace></LocaSpace> ");
            XmlDocument myDoc = new XmlDocument();

            //加载XML文件
            // XmlElement serverRootNode = null;
            try
            {
                myDoc.Load(strFileName);

            }
            catch (Exception e)
            {
                LogError.PublishError(e);
                File.Delete(strFileName);
                File.WriteAllText(strFileName, "<?xml version='1.0' encoding='utf-8' ?><LocaSpace></LocaSpace> ");
            }
            XmlNode serverRootNode = myDoc.SelectSingleNode("LocaSpace");
            if (serverRootNode == null)
            {
                serverRootNode = myDoc.CreateElement("LocaSpace");
            }
            XmlElement ele0 = myDoc.CreateElement("IsRecordedSql");
            ele0.InnerText = cbbRecordDatabaseConfig.Checked.ToString();
            serverRootNode.AppendChild(ele0);


            XmlElement ele1 = myDoc.CreateElement("sqlIP");
            ele1.InnerText = dbIp;
            serverRootNode.AppendChild(ele1);

            XmlElement ele2 = myDoc.CreateElement("database");
            ele2.InnerText = database;
            serverRootNode.AppendChild(ele2);

            XmlElement ele3 = myDoc.CreateElement("userName");
            ele3.InnerText = user;
            serverRootNode.AppendChild(ele3);


            XmlElement ele4 = myDoc.CreateElement("password");
            ele4.InnerText = pass;
            serverRootNode.AppendChild(ele4);
            try
            {
                myDoc.Save(strFileName);
            }
            catch (Exception exp)
            {
                LogError.PublishError(exp);
            }
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dbCombo_SelectedIndexChanged(object sender, EventArgs e)
        {
            listBox2.Items.Clear(); 
        }
        
        private void dbCombor_SelectedIndexChanged(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
        }
         
    }
}