Newer
Older
LSPipeline / Backup / FrmDatabaseParaSettingSqlServer.cs
wxn on 1 Dec 2016 8 KB first
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using GeoScene.Data;
using GeoScene.Engine;
using GeoScene.Globe;
using System.Data.SqlClient;
using System.IO;
using System.Xml;

namespace WorldGIS
{
    
    public partial class FrmDatabaseParaSettingSqlServer : Form
    { 
        private GSOGlobeControl globeControl1;
        public FrmDatabaseParaSettingSqlServer(GSOGlobeControl _globeControl)
        {
            globeControl1 = _globeControl;
            InitializeComponent();
        }

        private void FrmDatabaseParaSetting_Load(object sender, EventArgs e)
        {
            ReadXML();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Cursor = Cursors.WaitCursor;
            if (textBoxIP.Text == "" || textBoxDatabase.Text == "" || textBoxUser.Text == "" || textBoxPassword.Text == "")
            {
                this.Cursor = Cursors.Default;
                MessageBox.Show("连接参数不能为空!", "提示");
                return;
            }
            if (!Utility.isNetworkConnectionSuccess(textBoxIP.Text.Trim()))
            {
                this.Cursor = Cursors.Default;
                MessageBox.Show("网络连接失败!", "提示");
                return;
            }
            string serverIp = textBoxIP.Text.Trim();
            string hostName = System.Net.Dns.GetHostName();
            if (serverIp == hostName || serverIp == "localhost"
               || serverIp == System.Net.Dns.GetHostAddresses(hostName).GetValue(2).ToString())
            {                
               // serverIp = "127.0.0.1";
            }
            DateTime timeStart = DateTime.Now;
            GSODataSource ds = globeControl1.Globe.DataManager.GetDataSourceByName(serverIp + "_" + textBoxDatabase.Text.Trim());
            if (ds == null)
            {
                ds = globeControl1.Globe.DataManager.OpenSqlServerDataSource(serverIp, "", textBoxDatabase.Text, textBoxUser.Text, textBoxPassword.Text);
            }
            if (ds == null)
            {
                ds = globeControl1.Globe.DataManager.CreateSqlServerDataSource(serverIp, "", textBoxDatabase.Text, textBoxUser.Text, textBoxPassword.Text);
            }
            TimeSpan timeConnectSqlServer = DateTime.Now - timeStart;
            double secondsConnectSqlServer = timeConnectSqlServer.TotalSeconds;   
            if (ds == null)
            {
                this.Cursor = Cursors.Default;
                MessageBox.Show("SqlServer数据库连接失败!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            else
            {
                ds.IsCloseSaved = false;

                DatabaseConnectParams connectParams = new DatabaseConnectParams();
                connectParams.ip = textBoxIP.Text.Trim();
                connectParams.databaseName = textBoxDatabase.Text.Trim();
                connectParams.userName = textBoxUser.Text.Trim();
                connectParams.password = textBoxPassword.Text.Trim();
                connectParams.dataSourceName = ds.Name;
                connectParams.databaseType = EnumDataSourceType.SqlServer;
                Utility.connectParamsOfDatabase.Add(connectParams);

                WriteXML();
                MessageBox.Show("SqlServer数据库连接成功,用时:" + secondsConnectSqlServer.ToString() + "秒", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            this.DialogResult = DialogResult.OK;
            this.Cursor = Cursors.Default;
            this.Close();
        }

        private void ReadXML()
        {
            string strFileName = Path.GetDirectoryName(Application.ExecutablePath) + "/databaseConfig.xml";
            if (!File.Exists(strFileName))
            {
                return;
            }

            //初始化XML文档操作类
            XmlDocument myDoc = new XmlDocument();
            {
                //加载XML文件
                try
                {
                    myDoc.Load(strFileName);
                }
                catch (System.Exception e)
                {
                    Log.PublishTxt(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 (System.Xml.XmlNode xn in nodes)
                        {
                            if (xn.Name == "sqlIP")
                            {
                                textBoxIP.Text = xn.InnerText;
                            }
                            else if (xn.Name == "database")
                            {
                                textBoxDatabase.Text = xn.InnerText;
                            }
                            else if (xn.Name == "userName")
                            {
                                textBoxUser.Text = xn.InnerText;
                            }
                            else if (xn.Name == "password")
                            {
                                textBoxPassword.Text = xn.InnerText;
                            }
                        }
                    }
                }                
            }
        }

        private void WriteXML()
        {
            string strFileName = Path.GetDirectoryName(Application.ExecutablePath) + "/databaseConfig.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 (System.Exception e)
            {
                Log.PublishTxt(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 = textBoxIP.Text.Trim();
            serverRootNode.AppendChild(ele1);

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

            XmlElement ele3 = myDoc.CreateElement("userName");
            ele3.InnerText = textBoxUser.Text.Trim();
            serverRootNode.AppendChild(ele3);


            XmlElement ele4 = myDoc.CreateElement("password");
            ele4.InnerText = textBoxPassword.Text.Trim();
            serverRootNode.AppendChild(ele4);
            try
            {
                myDoc.Save(strFileName);
            }
            catch (Exception exp)
            {
                Log.PublishTxt(exp);
            }
        }        
        
        private void buttonNo_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}