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(); } } }