using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using DevComponents.DotNetBar; using System.Text.RegularExpressions; using System.Xml; using System.IO; namespace Cyberpipe { public partial class FrmDbManager : Office2007Form { private List<databaseClass> dblist = null; private string[] dbnames = null; private Boolean addStatus = false; private Boolean editStatus = false; private string strFileName = Application.StartupPath + "/databaseConfig.xml"; public FrmDbManager() { InitializeComponent(); } //初始化加载所有数据库列表 private void FrmDbManager_Load(object sender, EventArgs e) { dblist = readXML(); dbnames=new string[dblist.Count]; for (int i = 0; i < dblist.Count; i++) { dbLists.Items.Add(dblist[i].title); dbnames[i] = dblist[i].title; } } /// <summary> /// 读取xml文件 /// </summary> public List<databaseClass> readXML() { List<databaseClass> listDb = new List<databaseClass>(); if (File.Exists(strFileName)) { try { XmlDocument doc = new XmlDocument(); doc.Load(strFileName); 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) { } } return listDb; } /// <summary> /// 新建数据库连接 /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonX2_Click(object sender, EventArgs e) { dbTxt.Text = ""; dbIpTxt.Text = ""; dbNmTxt.Text = ""; dbUserTxt.Text = ""; dbUsrPwdTxt.Text = ""; dbTxt.Enabled = true; dbIpTxt.Enabled = true; dbNmTxt.Enabled = true; dbUserTxt.Enabled = true; dbUsrPwdTxt.Enabled = true; btnAdd.Enabled = false; btnEdit.Enabled = false; btnSave.Enabled = true; btnDelete.Enabled = false; addStatus = true; editStatus = false; } /// <summary> /// 点击数据库,查询基本配置 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void dbLists_SelectedIndexChanged(object sender, EventArgs e) { //MessageBox.Show(dbLists.SelectedItem.ToString()); string selectedDbname=dbLists.SelectedItem.ToString(); //根据库名查找对应的数据库配置 for (int i = 0; i < Utility.listDb.Count; i++) { if (selectedDbname == dblist[i].title) { dbTxt.Text = dblist[i].title; dbIpTxt.Text = dblist[i].dbip; dbNmTxt.Text = dblist[i].database; dbUserTxt.Text = dblist[i].dbuser; dbUsrPwdTxt.Text = dblist[i].dbpassword; } else { continue; } } } /// <summary> /// 编辑操作 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnEdit_Click(object sender, EventArgs e) { //dbTxt.Enabled = true; dbIpTxt.Enabled = true; dbNmTxt.Enabled = true; dbUserTxt.Enabled = true; dbUsrPwdTxt.Enabled = true; btnSave.Enabled = true; btnEdit.Enabled = false; editStatus = true; } /// <summary> /// 删除某个数据库配置 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnDelete_Click(object sender, EventArgs e) { if (dbLists.SelectedIndex > 0) { deleteXMLNode(strFileName,dbLists.SelectedItem.ToString().Trim()); } else { MessageBox.Show("请选择一个要删除的数据库连接"); return; } MessageBox.Show("删除成功"); //重载list表 dblist = readXML(); dbLists.Items.Clear(); for (int i = 0; i < dblist.Count; i++) { dbLists.Items.Add(dblist[i].title); } dbTxt.Text = ""; dbIpTxt.Text = ""; dbNmTxt.Text = ""; dbUserTxt.Text = ""; dbUsrPwdTxt.Text = ""; } /// <summary> /// 编辑后保存 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnSave_Click(object sender, EventArgs e) { if (editStatus) { //验证数据库配置是否正确 //ip为*.*.*.*的格式 if (!IPCheck(dbIpTxt.Text)) { MessageBox.Show("请输入正确的ip地址"); return; } //数据库名 //if (!IsLetter(dbNmTxt.Text)) //{ // MessageBox.Show("数据库名称应该为英文"); // return; //} //用户名 if (IsChinese(dbUserTxt.Text)) { MessageBox.Show("用户名应该为英文或数字"); return; } //密码 if (IsChinese(dbUsrPwdTxt.Text)) { MessageBox.Show("密码应该为英文或数字"); return; } //修改已有的databaseConfig.xml文件的一个节点 modifyXMLNode(strFileName, dbTxt.Text, dbIpTxt.Text, dbNmTxt.Text, dbUserTxt.Text, dbUsrPwdTxt.Text); MessageBox.Show("保存成功"); btnAdd.Enabled = true; btnEdit.Enabled = true; btnSave.Enabled = false; btnDelete.Enabled = true; addStatus = false; editStatus = false; } if (addStatus) { //验证数据库配置是否正确 //db为中文 //if (!IsChinese(dbTxt.Text.Trim())) //{ // MessageBox.Show("请输入正确的数据库标识名称"); // return; //} //ip为*.*.*.*的格式 if (!IPCheck(dbIpTxt.Text)) { MessageBox.Show("请输入正确的ip地址"); return; } //数据库名 //if (!IsLetter(dbNmTxt.Text)) { // MessageBox.Show("数据库名称应该为英文"); // return; //} //用户名 if (IsChinese(dbUserTxt.Text)) { MessageBox.Show("用户名应该为英文或数字"); return; } //密码 if (IsChinese(dbUsrPwdTxt.Text)) { MessageBox.Show("密码应该为英文或数字"); return; } //编辑已有的databaseConfig.xml文件 if (insertXMLNode(strFileName,dbTxt.Text,dbIpTxt.Text,dbNmTxt.Text, dbUserTxt.Text,dbUsrPwdTxt.Text)) { MessageBox.Show("保存成功"); } btnAdd.Enabled = true; btnEdit.Enabled = true; btnSave.Enabled = false; btnDelete.Enabled = true; addStatus = false; editStatus = false; } dbTxt.Enabled = false; dbIpTxt.Enabled = false; dbNmTxt.Enabled = false; dbUserTxt.Enabled = false; dbUsrPwdTxt.Enabled = false; dblist = readXML(); dbLists.Items.Clear(); for (int i = 0; i < dblist.Count; i++) { dbLists.Items.Add(dblist[i].title); } } /// <summary> /// 向xml文件中插入节点 /// </summary> /// <param name="db"></param> /// <param name="dbip"></param> /// <param name="dbname"></param> /// <param name="dbuser"></param> /// <param name="dbpwd"></param> public Boolean insertXMLNode(string strFileName,string db, string dbip, string dbname, string dbuser, string dbpwd) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(strFileName); XmlNode root = xmlDoc.SelectSingleNode("Database");//查找<Database> XmlElement xe1 = xmlDoc.CreateElement("dbc");//创建一个<dbc>节点 xe1.SetAttribute("title", db);//设置该节点title属性 XmlElement xesub1 = xmlDoc.CreateElement("dbip"); xesub1.InnerText = dbip;//设置文本节点 xe1.AppendChild(xesub1);//添加到<dbc>节点中 XmlElement xesub2 = xmlDoc.CreateElement("dbname"); xesub2.InnerText = dbname; xe1.AppendChild(xesub2); XmlElement xesub3 = xmlDoc.CreateElement("dbuser"); xesub3.InnerText = dbuser; xe1.AppendChild(xesub3); XmlElement xesub4 = xmlDoc.CreateElement("dbpassword"); xesub4.InnerText = dbpwd; xe1.AppendChild(xesub4); root.AppendChild(xe1);//添加到<Database>节点中 xmlDoc.Save(strFileName); return true; } /// <summary> /// 向xml文件中插入节点 /// </summary> /// <param name="db"></param> /// <param name="dbip"></param> /// <param name="dbname"></param> /// <param name="dbuser"></param> /// <param name="dbpwd"></param> public void modifyXMLNode(string strFileName, string title,string dbip, string dbname, string dbuser, string dbpwd) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(strFileName); XmlNodeList nodeList = xmlDoc.SelectSingleNode("Database").ChildNodes;//获取bookstore节点的所有子节点 foreach (XmlNode xn in nodeList)//遍历所有子节点 { XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型 if (xe.GetAttribute("title") == title)//如果title属性值为要修改的 { xe.SetAttribute("title", title);//则修改该属性为“” XmlNodeList nls = xe.ChildNodes;//继续获取xe子节点的所有子节点 foreach (XmlNode xn1 in nls)//遍历 { XmlElement xe1 = (XmlElement)xn1;//转换类型 if (xe1.Name == "dbip")//如果找到 { xe1.InnerText = dbip;//则修改 } } foreach(XmlNode xn1 in nls){ XmlElement xe2 = (XmlElement)xn1; if (xe2.Name == "dbname") { xe2.InnerText = dbname;//则修改 } } foreach(XmlNode xn1 in nls){ XmlElement xe3 = (XmlElement)xn1; if (xe3.Name == "dbuser") { xe3.InnerText = dbuser;//则修改 } } foreach(XmlNode xn1 in nls){ XmlElement xe4 = (XmlElement)xn1; if (xe4.Name == "dbpassword") { xe4.InnerText = dbpwd;//则修改 } } break; } } xmlDoc.Save(strFileName);//保存。 } /// <summary> /// 删除xml文件中的某个节点 /// </summary> /// <param name="strFileName"></param> /// <param name="db"></param> public void deleteXMLNode(string strFileName,string db) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(strFileName); XmlNodeList xnl = xmlDoc.SelectSingleNode("Database").ChildNodes; foreach (XmlNode xn in xnl) { XmlElement xe = (XmlElement)xn; if (xe.GetAttribute("title") ==db) { xn.ParentNode.RemoveChild(xn); } } xmlDoc.Save(strFileName); } /// <summary> /// 验证IP地址 /// </summary> /// <param name="IP"></param> /// <returns></returns> public bool IPCheck(string IP) { string num = @"(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)"; //创建正则表达式字符串 return Regex.IsMatch(IP, //使用正则表达式判断是否匹配 ("^" + num + "\\." + num + "\\." + num + "\\." + num + "$")); } /// <summary> /// 验证中文IsChinese /// </summary> /// <param name="str_chinese"></param> /// <returns></returns> public bool IsChinese(string str_chinese) { return System.Text.RegularExpressions.Regex. //使用正则表达式判断是否匹配 IsMatch(str_chinese, @"^[\u4e00-\u9fa5]{1,}$"); } /// <summary> /// 验证输入的是字母 /// </summary> /// <param name="str_Letter"></param> /// <returns></returns> public bool IsLetter(string str_Letter) { return System.Text.RegularExpressions.Regex. IsMatch(str_Letter, @"^[A-Za-z]+$"); } } }