基于ArcGIS10.0和Oracle10g的空间数据管理平台五(C#开发)-通用工具类
来源:互联网 发布:数据采集处理 编辑:程序博客网 时间:2024/05/29 21:33
由于在介绍通用数据管理模块功能的时候用到了许多通用的功能,例如word和excel与DataGridView控件的相互导入导出、写日志到数据库中等等。为了后面每一篇文章都能清楚的知道每一个功能具体是怎么实现的,现在先统一把用到的所有公用功能统一介绍和实现。由于SqlHelper类,也就是数据库的一些通用操作已经在登录模块中介绍,就不在重复介绍了。本篇将相介绍通用工具类CommonTools,由于代码中有比较详细的注释了,就不详细解析具体代码的功能了。这个类实现的功能如下。
1.从DataGridView控件导出数据到Word文档
- /// <summary>
- /// 从DataGridView控件导出数据到word文档
- /// </summary>
- /// <param name="dgv"></param>
- public static void ExportDataGridViewToWord(DataGridView dgv)
- {
- //打开保存的文件名
- SaveFileDialog sfile = new SaveFileDialog();
- sfile.AddExtension = true;
- sfile.DefaultExt = ".doc";
- sfile.Filter = "(*.doc)|*.doc";
- if (sfile.ShowDialog() == DialogResult.OK)
- {
- object path = sfile.FileName;
- Object none = System.Reflection.Missing.Value;
- Microsoft.Office.Interop.Word.Application wordApp = new Microsoft.Office.Interop.Word.Application();
- Microsoft.Office.Interop.Word.Document document = wordApp.Documents.Add(ref none, ref none, ref none, ref none);
- //建立表格
- Microsoft.Office.Interop.Word.Table table = document.Tables.Add(document.Paragraphs.Last.Range, dgv.Rows.Count, dgv.Columns.Count, ref none, ref none);
- try
- {
- //设置标题
- for (int i = 0; i < dgv.Columns.Count; i++)
- {
- table.Cell(0, i + 1).Range.Text = dgv.Columns[i].HeaderText;
- }
- //填充数据
- for (int i = 1; i < dgv.Rows.Count; i++)
- {
- for (int j = 0; j < dgv.Columns.Count; j++)
- {
- table.Cell(i + 1, j + 1).Range.Text = dgv[j, i - 1].Value.ToString();
- }
- }
- document.SaveAs(ref path, ref none, ref none, ref none, ref none, ref none,
- ref none, ref none, ref none, ref none, ref none, ref none, ref none,
- ref none, ref none, ref none);
- document.Close(ref none, ref none, ref none);
- MessageBox.Show("导出成功!");
- }
- finally
- {
- wordApp.Quit(ref none, ref none, ref none);
- }
- }
- }
2.导出DataGridView中的数据到excel,实现代码如下:
- /// <summary>
- /// 导出DataGridView中的数据到excel
- /// </summary>
- /// <param name="dataGridview1">DataGridView控件</param>
- public static void ExportDataGridViewToExcel(DataGridView dataGridview1)
- {
- SaveFileDialog saveFileDialog = new SaveFileDialog();
- saveFileDialog.Filter = "Execl files (*.xls)|*.xls";
- saveFileDialog.FilterIndex = 0;
- saveFileDialog.RestoreDirectory = true;
- saveFileDialog.CreatePrompt = true;
- saveFileDialog.Title = "导出Excel文件到";
- saveFileDialog.ShowDialog();
- Stream myStream;
- myStream = saveFileDialog.OpenFile();
- StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding("gb2312"));
- string str = "";
- try
- {
- //写标题
- for (int i = 0; i < dataGridview1.ColumnCount; i++)
- {
- if (i > 0)
- {
- str += "\t";
- }
- str += dataGridview1.Columns[i].HeaderText;
- }
- sw.WriteLine(str);
- //写内容
- for (int j = 0; j < dataGridview1.Rows.Count; j++)
- {
- string tempStr = "";
- for (int k = 0; k < dataGridview1.Columns.Count; k++)
- {
- if (k > 0)
- {
- tempStr += "\t";
- }
- tempStr += dataGridview1.Rows[j].Cells[k].Value.ToString();
- }
- sw.WriteLine(tempStr);
- }
- sw.Close();
- myStream.Close();
- }
- catch (Exception e)
- {
- MessageBox.Show(e.Message);
- }
- finally
- {
- sw.Close();
- myStream.Close();
- }
- }
3.导入XML文件的数据到Oracle数据库
- /// <summary>
- /// 导入XML文件的数据到Oracle数据库中
- /// </summary>
- /// <param name="strXmlFileName">Xml文件名称(完整的路径)</param>
- /// <param name="strDatabaseName">导入的数据库名称</param>
- public static void ImportXmlToOracle(string strXmlFileName, string strDatabaseName)
- {
- NewDataSet nds = new NewDataSet();
- string sql = string.Empty;
- foreach (System.Data.DataTable dt in nds.Tables)
- {
- sql = "select * from ";
- sql += strDatabaseName + "_" + dt.TableName;
- OracleDataAdapter oda = new OracleDataAdapter(sql,
- ConfigurationSettings.AppSettings["ConnectionString"]);
- OracleCommandBuilder builder = new OracleCommandBuilder(oda);
- oda.Fill(nds.Tables[dt.TableName]);
- }
- try
- {
- XmlDocument doc = new XmlDocument();
- doc.Load(strXmlFileName);
- XmlNodeList nodeList = doc.GetElementsByTagName("tableType");
- string strTableType = string.Empty;
- foreach (XmlNode node in nodeList)
- {
- if (node.Name == "tableType")
- {
- strTableType += node.InnerText + ";";
- }
- }
- strTableType = strTableType.Substring(0, strTableType.Length - 1);
- foreach (XmlNode node in nodeList)
- {
- if (node.Name == "tableType")
- {
- node.InnerText = strTableType;
- break;
- }
- }
- nodeList = doc.GetElementsByTagName("graphOverview");
- foreach (XmlNode node in nodeList)
- {
- if (node.Name == "graphOverview")
- {
- string str = string.Empty;
- if (node.InnerText.IndexOf(".jpg".ToUpper()) != -1)
- {
- str = node.InnerText.Substring(node.InnerText.IndexOf(".jpg".ToUpper()) + 4);
- }
- else if (node.InnerText.IndexOf(".jpg") != -1)
- {
- str = node.InnerText.Substring(node.InnerText.IndexOf(".jpg") + 4);
- }
- node.InnerText = str;
- break;
- }
- }
- doc.Save("temp.xml");
- nds.ReadXml("temp.xml");
- System.IO.File.Delete("temp.xml");
- foreach (System.Data.DataTable dt in nds.Tables)
- {
- if (dt.Rows.Count > 0)
- {
- string strTableName = strDatabaseName + "_" + dt.TableName;
- sql = "select * from " + strTableName;
- DataSet ds = new DataSet();
- OracleDataAdapter oda = new OracleDataAdapter(sql,
- ConfigurationSettings.AppSettings["ConnectionString"]);
- OracleCommandBuilder builder = new OracleCommandBuilder(oda);
- oda.Fill(ds);
- oda.Update(dt);
- }
- }
- }
- catch (Exception ex)
- {
- MessageBox.Show(ex.Message);
- LogHelp.writeLog(FrmMain.metaUsername, "元数据目录管理",
- "导入元数据文件<" + strXmlFileName + ">失败!");
- }
- }
这个函数主要用在元数据管理子系统,把XML格式的数据导入Oracle数据库,这里XML格式的文件是通过一个XSD文件定义格式得到的,XSD文件就是Xml数据格式的约束文件,就是通过它定义XML具体的格式。然而微软有一个工具可以根据这个XSD文件生成对应的数据集类,在我的代码里就是NewDataSet类。这个数据集类就可以管理对应的格式的所有XML生成的表结构数据。这里还需要说明一点的就是管理元数据需要一个单独的元数据库,也就是要求重新建立一个Oracle数据库,但是用C#代码创建Oracle数据库确实很有难度,所以我选择了一种比较巧妙的实现方式,就是把所有属于元数据的表用前缀标明(如metadata_名称),这样每次操作元数据库就只需要找到相应前缀的表就可以了,具体在元数据管理子系统有详细介绍实现方案。
因为XML文件里面包含有图片数据(经过64base编码的字符串表示),所以在处理XML文件需要先处理一下这个XML文件的图片字段,才有上面新建一个临时的XML文件,然后用数据集类对象读入XML数据,然后删除临时的XML文件。最后还是例如数据集适配器来插入元数据到Oracle数据库。
4.根据元数据的ID删除一条元数据(从Oracle数据库):
- /// <summary>
- /// 根据元数据ID删除一条元数据,一条元数据涉及到每一个元数据库的表
- /// </summary>
- /// <param name="strMdid">元数据ID</param>
- /// <param name="strDatabaseName">元数据名称</param>
- public static void DelOneMetaData(string strMdid, string strDatabaseName)
- {
- SqlHelper sh = new SqlHelper();
- OracleConnection conn = new OracleConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
- conn.Open();
- //创建一个 OracleTransaction 对象,然后调用 OracleConnection 对象
- //的 BeginTransaction() 方法启动事务。
- OracleTransaction trans = conn.BeginTransaction();
- //创建一个 OracleCommand 对象,用于存储 SQL 语句。
- OracleCommand cmd = conn.CreateCommand();
- cmd.Transaction = trans;
- string sql = string.Empty;
- //xxx_metadata
- sql = "delete from " + strDatabaseName + "_metadata";
- sql += " where mdid like'" + strMdid + "'";
- cmd.CommandText = sql;
- cmd.ExecuteNonQuery();
- sql = "select metadata_id from " + strDatabaseName + "_metadata";
- sql += " where mdid like'" + strMdid + "'";
- OracleDataReader odr1 = sh.ReturnDataReader(sql);
- if (odr1.Read())
- {
- //xxx_continfo
- sql = "delete from " + strDatabaseName + "_continfo";
- sql += " where metadata_id=" + odr1[0].ToString();
- cmd.CommandText = sql;
- cmd.ExecuteNonQuery();
- sql = "select continfo_id from " + strDatabaseName + "_continfo";
- sql += " where metadata_id=" + odr1[0].ToString();
- OracleDataReader odr2 = sh.ReturnDataReader(sql);
- if (odr2.Read())
- {
- //xxx_layerinfo
- sql = "delete from " + strDatabaseName + "_layerinfo";
- sql += " where continfo_id=" + odr2[0].ToString();
- cmd.CommandText = sql;
- cmd.ExecuteNonQuery();
- //xxx_tableinfo
- sql = "delete from " + strDatabaseName + "_tableinfo";
- sql += " where continfo_id=" + odr2[0].ToString();
- cmd.CommandText = sql;
- cmd.ExecuteNonQuery();
- }
- //xxx_graph
- sql = "delete from " + strDatabaseName + "_graph";
- sql += " where metadata_id=" + odr1[0].ToString();
- cmd.CommandText = sql;
- cmd.ExecuteNonQuery();
- //xxx_idpoc
- sql = "delete from " + strDatabaseName + "_idpoc";
- sql += " where metadata_id=" + odr1[0].ToString();
- cmd.CommandText = sql;
- cmd.ExecuteNonQuery();
- sql = "select idpoc_id from " + strDatabaseName + "_idpoc";
- sql += " where metadata_id=" + odr1[0].ToString();
- OracleDataReader odr3 = sh.ReturnDataReader(sql);
- if (odr3.Read())
- {
- //xxx_contact
- sql = "delete from " + strDatabaseName + "_contact";
- sql += " where idpoc_id=" + odr3[0].ToString();
- cmd.CommandText = sql;
- cmd.ExecuteNonQuery();
- sql = "select contact_id from " + strDatabaseName + "_contact";
- sql += " where idpoc_id=" + odr3[0].ToString();
- OracleDataReader odr4 = sh.ReturnDataReader(sql);
- if (odr4.Read())
- {
- //xxx_cntadd
- sql = "delete from " + strDatabaseName + "_cntadd";
- sql += " where contact_id=" + odr4[0].ToString();
- cmd.CommandText = sql;
- cmd.ExecuteNonQuery();
- //xxx_cntphone
- sql = "delete from " + strDatabaseName + "_cntphone";
- sql += " where contact_id=" + odr4[0].ToString();
- cmd.CommandText = sql;
- cmd.ExecuteNonQuery();
- sql = "select cntphone_id from " + strDatabaseName + "_cntphone";
- sql += " where contact_id=" + odr4[0].ToString();
- OracleDataReader odr5 = sh.ReturnDataReader(sql);
- if (odr5.Read())
- {
- //xxx_voicenum
- sql = "delete from " + strDatabaseName + "_voicenum";
- sql += " where cntphone_id=" + odr4[0].ToString();
- cmd.CommandText = sql;
- cmd.ExecuteNonQuery();
- }
- }
- }
- //xxx_keyword
- sql = "delete from " + strDatabaseName + "_keyword";
- sql += " where metadata_id=" + odr1[0].ToString();
- cmd.CommandText = sql;
- cmd.ExecuteNonQuery();
- //xxx_onlinesrc
- sql = "delete from " + strDatabaseName + "_onlinesrc";
- sql += " where metadata_id=" + odr1[0].ToString();
- cmd.CommandText = sql;
- cmd.ExecuteNonQuery();
- sql = "select onlinesrc_id from " + strDatabaseName + "_onlinesrc";
- sql += " where metadata_id=" + odr1[0].ToString();
- OracleDataReader odr6 = sh.ReturnDataReader(sql);
- if (odr6.Read())
- {
- //xxx_dtbrlinkage
- sql = "delete from " + strDatabaseName + "_dtbrlinkage";
- sql += " where onlinesrc_id=" + odr6[0].ToString();
- cmd.CommandText = sql;
- cmd.ExecuteNonQuery();
- //xxx_dtdllinkage
- sql = "delete from " + strDatabaseName + "_dtdllinkage";
- sql += " where onlinesrc_id=" + odr6[0].ToString();
- cmd.CommandText = sql;
- cmd.ExecuteNonQuery();
- }
- //xxx_tpcat
- sql = "delete from " + strDatabaseName + "_tpcat";
- sql += " where metadata_id=" + odr1[0].ToString();
- cmd.CommandText = sql;
- cmd.ExecuteNonQuery();
- try
- {
- trans.Commit();
- }
- catch (Exception)
- {
- trans.Rollback();
- LogHelp.writeLog(FrmMain.metaUsername, "元数据编辑", "删除元数据<" + strMdid + ">失败!");
- MessageBox.Show("删除元数据<" + strMdid + ">失败!");
- }
- finally
- {
- conn.Close();
- }
- }
- }
因为根据XSD文件解析生成的数据库表有十几个,所以对每一个表单独采用事务操作,就是这十几个表其实是一个整体,可以完整的表示一条元数据(元数据:描述数据的数据,这里就是描述空间数据特性的数据)。
5.根据元数据的ID从Oracle查询得到一条元数据,和删除一条元数据类似,也需要十几个表一起操作:
- /// <summary>
- /// 根据元数据ID得到有一条元数据的数据集
- /// </summary>
- /// <param name="strMdid">元数据ID</param>
- /// <param name="strDatabaseName">元数据名称</param>
- /// <returns></returns>
- public static NewDataSet GetOneMetaData(string strMdid, string strDatabaseName)
- {
- NewDataSet nds = new NewDataSet();
- SqlHelper sh = new SqlHelper();
- string sql = string.Empty;
- //xxx_metadata
- sql = "select * from " + strDatabaseName + "_metadata";
- sql += " where mdid like'" + strMdid + "'";
- OracleDataAdapter oda1 = new OracleDataAdapter(sql,
- ConfigurationSettings.AppSettings["ConnectionString"]);
- oda1.Fill(nds.Tables["metadata"]);
- sql = "select metadata_id from " + strDatabaseName + "_metadata";
- sql += " where mdid like'" + strMdid + "'";
- OracleDataReader odr1 = sh.ReturnDataReader(sql);
- if (odr1.Read())
- {
- //xxx_continfo
- sql = "select * from " + strDatabaseName + "_continfo";
- sql += " where metadata_id=" + odr1[0].ToString();
- OracleDataAdapter oda2 = new OracleDataAdapter(sql,
- ConfigurationSettings.AppSettings["ConnectionString"]);
- oda2.Fill(nds.Tables["continfo"]);
- sql = "select continfo_id from " + strDatabaseName + "_continfo";
- sql += " where metadata_id=" + odr1[0].ToString();
- OracleDataReader odr2 = sh.ReturnDataReader(sql);
- if (odr2.Read())
- {
- //xxx_layerinfo
- sql = "select * from " + strDatabaseName + "_layerinfo";
- sql += " where continfo_id=" + odr2[0].ToString();
- OracleDataAdapter oda8 = new OracleDataAdapter(sql,
- ConfigurationSettings.AppSettings["ConnectionString"]);
- oda8.Fill(nds.Tables["layerinfo"]);
- //xxx_tableinfo
- sql = "select * from " + strDatabaseName + "_tableinfo";
- sql += " where continfo_id=" + odr2[0].ToString();
- OracleDataAdapter oda9 = new OracleDataAdapter(sql,
- ConfigurationSettings.AppSettings["ConnectionString"]);
- oda9.Fill(nds.Tables["tableinfo"]);
- }
- //xxx_graph
- sql = "select * from " + strDatabaseName + "_graph";
- sql += " where metadata_id=" + odr1[0].ToString();
- OracleDataAdapter oda3 = new OracleDataAdapter(sql,
- ConfigurationSettings.AppSettings["ConnectionString"]);
- oda3.Fill(nds.Tables["graph"]);
- //xxx_idpoc
- sql = "select * from " + strDatabaseName + "_idpoc";
- sql += " where metadata_id=" + odr1[0].ToString();
- OracleDataAdapter oda4 = new OracleDataAdapter(sql,
- ConfigurationSettings.AppSettings["ConnectionString"]);
- oda4.Fill(nds.Tables["idpoc"]);
- sql = "select idpoc_id from " + strDatabaseName + "_idpoc";
- sql += " where metadata_id=" + odr1[0].ToString();
- OracleDataReader odr3 = sh.ReturnDataReader(sql);
- if (odr3.Read())
- {
- //xxx_contact
- sql = "select * from " + strDatabaseName + "_contact";
- sql += " where idpoc_id=" + odr3[0].ToString();
- OracleDataAdapter oda12 = new OracleDataAdapter(sql,
- ConfigurationSettings.AppSettings["ConnectionString"]);
- oda12.Fill(nds.Tables["contact"]);
- sql = "select contact_id from " + strDatabaseName + "_contact";
- sql += " where idpoc_id=" + odr3[0].ToString();
- OracleDataReader odr4 = sh.ReturnDataReader(sql);
- if (odr4.Read())
- {
- //xxx_cntadd
- sql = "select * from " + strDatabaseName + "_cntadd";
- sql += " where contact_id=" + odr4[0].ToString();
- OracleDataAdapter oda13 = new OracleDataAdapter(sql,
- ConfigurationSettings.AppSettings["ConnectionString"]);
- oda13.Fill(nds.Tables["cntadd"]);
- //xxx_cntphone
- sql = "select * from " + strDatabaseName + "_cntphone";
- sql += " where contact_id=" + odr4[0].ToString();
- OracleDataAdapter oda14 = new OracleDataAdapter(sql,
- ConfigurationSettings.AppSettings["ConnectionString"]);
- oda14.Fill(nds.Tables["cntphone"]);
- sql = "select cntphone_id from " + strDatabaseName + "_cntphone";
- sql += " where contact_id=" + odr4[0].ToString();
- OracleDataReader odr5 = sh.ReturnDataReader(sql);
- if (odr5.Read())
- {
- //xxx_voicenum
- sql = "select * from " + strDatabaseName + "_voicenum";
- sql += " where cntphone_id=" + odr4[0].ToString();
- OracleDataAdapter oda15 = new OracleDataAdapter(sql,
- ConfigurationSettings.AppSettings["ConnectionString"]);
- oda15.Fill(nds.Tables["voicenum"]);
- }
- }
- }
- //xxx_keyword
- sql = "select * from " + strDatabaseName + "_keyword";
- sql += " where metadata_id=" + odr1[0].ToString();
- OracleDataAdapter oda5 = new OracleDataAdapter(sql,
- ConfigurationSettings.AppSettings["ConnectionString"]);
- oda5.Fill(nds.Tables["keyword"]);
- //xxx_onlinesrc
- sql = "select * from " + strDatabaseName + "_onlinesrc";
- sql += " where metadata_id=" + odr1[0].ToString();
- OracleDataAdapter oda6 = new OracleDataAdapter(sql,
- ConfigurationSettings.AppSettings["ConnectionString"]);
- oda6.Fill(nds.Tables["onlinesrc"]);
- sql = "select onlinesrc_id from " + strDatabaseName + "_onlinesrc";
- sql += " where metadata_id=" + odr1[0].ToString();
- OracleDataReader odr6 = sh.ReturnDataReader(sql);
- if (odr6.Read())
- {
- //xxx_dtbrlinkage
- sql = "select * from " + strDatabaseName + "_dtbrlinkage";
- sql += " where onlinesrc_id=" + odr6[0].ToString();
- OracleDataAdapter oda10 = new OracleDataAdapter(sql,
- ConfigurationSettings.AppSettings["ConnectionString"]);
- oda10.Fill(nds.Tables["dtbrlinkage"]);
- //xxx_dtdllinkage
- sql = "select * from " + strDatabaseName + "_dtdllinkage";
- sql += " where onlinesrc_id=" + odr6[0].ToString();
- OracleDataAdapter oda11 = new OracleDataAdapter(sql,
- ConfigurationSettings.AppSettings["ConnectionString"]);
- oda11.Fill(nds.Tables["dtdllinkage"]);
- }
- //xxx_tpcat
- sql = "select * from " + strDatabaseName + "_tpcat";
- sql += " where metadata_id=" + odr1[0].ToString();
- OracleDataAdapter oda7 = new OracleDataAdapter(sql,
- ConfigurationSettings.AppSettings["ConnectionString"]);
- oda7.Fill(nds.Tables["tpcat"]);
- }
- return nds;
- }
6.导出Oracle数据库的数据到XML文件中
- /// <summary>
- /// 导出Oracle数据库的数据到XML文件中
- /// </summary>
- /// <param name="strXmlPath">导出的目录</param>
- /// <param name="strDatabaseName">导出的数据库名称</param>
- public static void ExportXmlFromOracle(string strXmlPath, string strDatabaseName)
- {
- NewDataSet nds;
- SqlHelper sh = new SqlHelper();
- string sql = string.Empty;
- sql = "select mdid from " + strDatabaseName + "_metadata";
- OracleDataReader odr = sh.ReturnDataReader(sql);
- while (odr.Read())
- {
- string strMdid = odr[0].ToString();
- //根据元数据的ID得到一条元数据
- nds = GetOneMetaData(strMdid, strDatabaseName);
- nds.WriteXml(strXmlPath + "\\" + strMdid + ".xml");
- }
- }
7.下面两个函数实现treeview控件向XML转换,主要用于对元数据的编辑后保存到XML文件中。
- #region 遍历tree并实现向XML的转化
- /// <summary>
- /// 遍历treeview并实现向XML的转化
- /// </summary>
- /// <param name="advTree">树控件对象</param>
- /// <param name="strXmlFilePath">XML输出路径</param>
- public static void TreeToXML(AdvTree advTree, string strXmlFilePath)
- {
- XmlTextWriter xtw = new XmlTextWriter(strXmlFilePath, null);
- XmlDocument xmlDoc = new XmlDocument();
- //控制格式并写XML的开头
- xtw.Formatting = Formatting.Indented;
- xtw.WriteStartDocument(true);
- xtw.WriteStartElement("metadata");
- xtw.WriteStartAttribute("xsi","noNamespaceSchemaLocation", "http://www.w3.org/2001/XMLSchema-instance");
- xtw.WriteEndAttribute();
- xtw.WriteEndElement();
- xtw.WriteEndDocument();
- xtw.Close();
- xmlDoc.Load(strXmlFilePath);
- XmlNode xnRoot = xmlDoc.SelectSingleNode("metadata");
- TransTreeToXml(xmlDoc, advTree.FindNodeByName("metadata").Nodes, (XmlElement)xnRoot, strXmlFilePath);
- }
- /// <summary>
- /// 转化Tree节点的数据到XML文档
- /// </summary>
- /// <param name="xmlDoc">XML文档对象</param>
- /// <param name="nodes">Tree的节点集合</param>
- /// <param name="xeRoot">根节点元素</param>
- /// <param name="strXmlPath">XML的节点路径</param>
- private static void TransTreeToXml(XmlDocument xmlDoc,
- NodeCollection nodes, XmlElement xeRoot, String strXmlPath)
- {
- XmlElement xe;
- //遍历节点集合中的所有节点
- foreach (Node node in nodes)
- {
- //根据节点的名称创建一个新的XML节点元素
- xe = xmlDoc.CreateElement(node.Name);
- //将新建的XML节点元素添加到父亲节点(也就是传递进来的根节点)
- xeRoot.AppendChild(xe);
- //如果节点还有子节点就递归调用本函数
- if (node.Nodes.Count > 0)
- {
- TransTreeToXml(xmlDoc, node.Nodes, xe, strXmlPath);
- }
- else
- {
- //因为Tree节点数据的格式是:(名称:值),所以根据格式取出具体的值
- string strTemp = node.Text.Substring(node.Text.IndexOf(':')+1);
- //这个值不是空就填写新建的XML节点的值
- if (strTemp != "")
- {
- //特殊处理graphOverview节点,因为它涉及到图形的二进制数据,需要转化为字符串
- if (xe.Name == "graphOverview")
- {
- //以下就是将图形二进制数据转化为字符串
- Bitmap bmp = new Bitmap(strTemp);
- MemoryStream ms = new MemoryStream();
- bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
- byte[] arr = new byte[ms.Length];
- ms.Position = 0;
- ms.Read(arr, 0, (int)ms.Length);
- ms.Close();
- String strbaser64 = Convert.ToBase64String(arr);
- //给节点填充值
- xe.InnerText = strbaser64;
- }
- else
- {
- //给节点填充值
- xe.InnerText = strTemp;
- }
- }
- }
- }
- xmlDoc.Save(strXmlPath);
- }
- #endregion
8.遍历XML并实现向tree控件的转化
- #region 遍历XML并实现向tree的转化
- /// <summary>
- /// 遍历XML并实现向tree的转化
- /// </summary>
- /// <param name="strXmlFilePath">XML输入路径</param>
- /// <param name="advTree">树控件对象</param>
- public static void XMLToTree(string strXmlFilePath, AdvTree advTree)
- {
- //新建XML文档对象并载入XML文件数据
- XmlDocument xmlDoc = new XmlDocument();
- xmlDoc.Load(strXmlFilePath);
- //找到根节点
- XmlNodeList xnl = xmlDoc.GetElementsByTagName("metadata");
- XmlNode root = xnl[0];
- //根据找到的根节点遍历整个XML文件的节点
- foreach (XmlNode xn in root.ChildNodes)
- {
- //找到Tree对于的节点
- Node n = advTree.FindNodeByName(xn.Name);
- //如果有子节点就调用递归转化函数
- if (n.HasChildNodes)
- {
- TransXMLToTree(xn.ChildNodes, advTree);
- }
- else
- {
- //如果节点的内容不为空就为Tree控件节点添加值
- if (xn.InnerText != "")
- {
- //标记已经有值,方便以后对Tree的编辑操作
- n.Tag = "yes";
- n.Text += xn.InnerText;
- //如果此节点有父亲节点就把对于的父亲节点也标记为有值
- while (n.Parent != null)
- {
- Node np = n.Parent;
- np.Tag = "yes";
- n = n.Parent;
- }
- }
- }
- }
- }
- /// <summary>
- /// 递归转化XML文件的节点到Tree的节点
- /// </summary>
- /// <param name="xmlNodes">XML文件的节点集合</param>
- /// <param name="advTree">Tree控件</param>
- private static void TransXMLToTree(XmlNodeList xmlNodes, AdvTree advTree)
- {
- //循环遍历节点集合
- foreach (XmlNode xn in xmlNodes)
- {
- //根据XML的节点找到对于的Tree节点
- Node n = advTree.FindNodeByName(xn.Name);
- //如果还有子节点就递归转换
- if (n.HasChildNodes)
- {
- TransXMLToTree(xn.ChildNodes, advTree);
- }
- else
- {
- //如果节点的内容不为空就为Tree控件节点添加值
- if (xn.InnerText != "")
- {
- //标记已经有值,方便以后对Tree的编辑操作
- n.Tag = "yes";
- n.Text += xn.InnerText;
- //如果此节点有父亲节点就把对于的父亲节点也标记为有值
- while (n.Parent != null)
- {
- Node np = n.Parent;
- np.Tag = "yes";
- n = n.Parent;
- }
- }
- }
- }
- }
- #endregion
9.将DataGridView显示的内容导出Excel
- /// <summary>
- /// 直接将DataGridView显示的内容导出Excel
- /// </summary>
- /// <param name="m_DataView"></param>
- public static void DataToExcel(DataGridView m_DataView)
- {
- int iRows = 0;
- int iCols = 0;
- int iTrueCols = 0;
- Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
- Microsoft.Office.Interop.Excel._Workbook wb = app.Workbooks.Add(System.Reflection.Missing.Value);
- Microsoft.Office.Interop.Excel._Worksheet ws = null;
- if (wb.Worksheets.Count > 0)
- {
- ws = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets.get_Item(1);
- }
- else
- {
- wb.Worksheets.Add(System.Reflection.Missing.Value, System.Reflection.Missing.Value,
- System.Reflection.Missing.Value, System.Reflection.Missing.Value);
- ws = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets.get_Item(1);
- }
- if (ws != null)
- {
- ws.Name = "sheet1";
- iRows = m_DataView.Rows.Count; //加上列头行
- iTrueCols = m_DataView.Columns.Count; //包含隐藏的列,一共有多少列
- //求列数,省略Visible = false的列
- for (int i = 0; i < m_DataView.Columns.Count; i++)
- {
- if (m_DataView.Columns[i].Visible) iCols++;
- }
- string[,] dimArray = new string[iRows + 1, iCols];
- for (int j = 0, k = 0; j < iTrueCols; j++)
- {
- //省略Visible = false的列
- if (m_DataView.Columns[j].Visible)
- {
- dimArray[0, k] = m_DataView.Columns[j].HeaderText;
- k++;
- }
- }
- for (int i = 0; i < iRows; i++)
- {
- for (int j = 0, k = 0; j < iTrueCols; j++)
- {
- //省略Visible = false的列
- if (m_DataView.Columns[j].Visible)
- {
- if (m_DataView.Rows[i].Cells[j].Value != null)
- {
- dimArray[i + 1, k] = m_DataView.Rows[i].Cells[j].Value.ToString();
- }
- k++;
- }
- }
- }
- ws.get_Range(ws.Cells[1, 1], ws.Cells[iRows + 1, iCols]).Value2 = dimArray;
- ws.get_Range(ws.Cells[1, 1], ws.Cells[1, iCols]).Font.Bold = true;
- ws.get_Range(ws.Cells[1, 1], ws.Cells[iRows + 1, iCols]).Font.Size = 10.0;
- ws.get_Range(ws.Cells[1, 1], ws.Cells[iRows + 1, iCols]).RowHeight = 14.25;
- //ws.Columns[.ColumnWidth = datagridview.Columns[0].Width;
- for (int j = 0, k = 0; j < iTrueCols; j++)
- {
- //省略Visible = false的列
- if (m_DataView.Columns[j].Visible)
- {
- ws.get_Range(ws.Cells[1, k + 1], ws.Cells[1, k + 1]).ColumnWidth =
- (m_DataView.Columns[j].Width / 8.4) > 255 ? 255 : (m_DataView.Columns[j].Width / 8.4);
- //ws.Columns.c = datagridview.Columns[j].Width;
- k++;
- }
- }
- }
- //设置禁止弹出保存和覆盖的询问提示框
- app.DisplayAlerts = false;
- app.AlertBeforeOverwriting = false;
- app.Visible = false;
- //保存工作簿
- try
- {
- app.Save("temp");
- }
- catch (System.Exception ex)
- {
- MessageBox.Show(ex.Message);
- }
- finally
- {
- app.UserControl = false;
- app.Quit();
- File.Delete("temp.xlwx");
- }
- }
10.excel数据导入到DataGridView控件中
- /// <summary>
- /// Excel数据导入方法
- /// </summary>
- /// <param name="filePath"></param>
- /// <param name="dgv"></param>
- public static void EcxelToDataGridView(string filePath, DataGridView dgv)
- {
- try
- {
- //根据路径打开一个Excel文件并将数据填充到DataSet中
- string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " + filePath + ";Extended Properties ='Excel 8.0'";
- OleDbConnection conn = new OleDbConnection(strConn);
- conn.Open();
- string strExcel = "";
- OleDbDataAdapter myCommand = null;
- DataSet ds = null;
- strExcel = "select * from [sheet1$]";
- myCommand = new OleDbDataAdapter(strExcel, strConn);
- ds = new DataSet();
- myCommand.Fill(ds, "table1");
- //根据Excel的行逐一对上面构造的DataTable的列进行赋值
- foreach (DataRow excelRow in ds.Tables[0].Rows)
- {
- int i = 0;
- DataRow dr = ((System.Data.DataTable)dgv.DataSource).Rows.Add();
- for (i = 0; i < ds.Tables[0].Columns.Count; ++i)
- {
- dr[i + 1] = excelRow[i];
- }
- }
- }
- catch (System.Exception ex)
- {
- MessageBox.Show(ex.Message);
- }
- }
11.数据备份与恢复
- /// <summary>
- /// 数据库备份或恢复
- /// </summary>
- /// <param name="strCmd">备份或恢复命令</param>
- /// <param name="strDmpFileName">dmp文件名称</param>
- /// <param name="strLogFileName">log文件名称</param>
- /// <returns>true:成功;false:失败</returns>
- public static bool DBBackup(string strCmd, string strDmpFileName, string strLogFileName)
- {
- // 返回值
- bool result = false;
- // cmd中输入的参数内容
- string arg = strCmd + " FILE= " + strDmpFileName + " LOG= " + strLogFileName;
- try
- {
- // 如果dmp文件不存在,创建文件并释放
- if (!File.Exists(strDmpFileName))
- {
- File.Create(strDmpFileName).Dispose();
- }
- // 如果log文件不存在,创建文件并释放
- if (!File.Exists(strLogFileName))
- {
- File.Create(strLogFileName).Dispose();
- }
- // 开启新进程
- Process p = new Process();
- // 打开运行cmd
- p.StartInfo.FileName = "cmd.exe";
- // 要运行的命令
- p.StartInfo.Arguments = arg;
- // 关闭shell的使用
- p.StartInfo.UseShellExecute = false;
- //p.StartInfo.RedirectStandardInput = true;
- // 设置显示cmd运行界面
- p.StartInfo.CreateNoWindow = false;
- // 启动进程
- p.Start();
- p.WaitForExit();
- p.Dispose();
- result = true;
- }
- catch (Exception ex)
- {
- MessageBox.Show(ex.Message);
- return false;
- }
- return result;
- }
总结:这些功能放在一个类中可能不是很合理,但是当时是为了自己编程的方便,只要有多处实现的一些独立的功能,我就加入到这个类中来,并全部用静态的方法实现。
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台五(C#开发)-通用工具类
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台五(C#开发)-通用工具类
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台四(C#开发)-通用数据管理模块
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台四(C#开发)-通用数据管理模块
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台七(C#开发)-日志操作类
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台七(C#开发)-日志操作类
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台十三(C#开发)-空间数据导出
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台十五(C#开发)-空间数据导出
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台十三(C#开发)-空间数据导出
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台十五(C#开发)-空间数据导出
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台(C#开发)-(GIS)地理信息系统简介
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台(C#开发)-(GIS)地理信息系统简介
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台二(C#开发)-登录功能模块
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台(C#开发)补充说明
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台(C#开发)-AE常用操作代码
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台(C#开发)-ArcGIS_Engine中的数据访问
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台(C#开发)-数据库设计
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台(C#开发)-背景介绍
- camera V4L2 FIMC
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台三(C#开发)-多皮肤主界面功能
- linux shell trap的使用
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台四(C#开发)-通用数据管理模块
- 追逐算法之--牛鞭的子弹是怎样练成的(3)--简单碰撞检测
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台五(C#开发)-通用工具类
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台(C#开发)ArcGIS相关知识补充学习
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台六(C#开发)-空间数据操作类
- 鸡尾酒排序法(双向冒泡)
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台(C#开发)-AE常用操作代码
- CopyOnWriteArrayList
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台七(C#开发)-日志操作类
- 条件表达式的使用----字符和数字的选择问题
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台(C#开发)-ArcGIS_Engine中的数据访问