zoukankan      html  css  js  c++  java
  • 将数据库表中的数据导出到xml文档!

     2012年9月18日,星期二
    今天遇到一个题目:将数据库表中的数据导出到XML文档!然后再将XML文档导入到数据库!思考了一会,发现有很多方法可以做到,下面一一介绍下吧。。如有任何意见或建议或者有更加简洁的方法,欢迎大家提出。。感激不尽!
     
    方法一:
     
    第一步:首先是在数据库中创建相应的表Person,并插入数据(数据库名为Mydb):
     1 create table Person
     2 (
     3 id int identity(1,1) primary key,
     4 name nvarchar(10),
     5 gender nvarchar(1),
     6 age int
     7 )
     8 go
     9 insert into Person(name, gender,age) values('tom,'',9);
    10 go
    11 insert into Person(name, gender,age) values('jerry,'',19);
    12 go
    13 insert into Person(name, gender,age) values('lily,'',25);
    14 go
    15 insert into Person(name, gender,age) values('allen,'',22);
     
    第二步:新建一个控制台项目,并添加配置文件:
    1 <configuration>
    2 <connectionStrings>
    3 <add name ="constr" connectionString ="server = .;database = Mydb;uid = sa;pwd = xqt;"/>
    4 </connectionStrings>
    5 </configuration>
     
    第三步:开始读取数据表,并加载到XML文档中:
     1 static void Main(string[] args)
     2 {
     3   string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
     4   string sql = "select * from Person";
     5   XDocument doc = new XDocument(); //新建一个xml文档对象
     6   XElement xRoot = new XElement("学生信息"); //根目录,(很重要,如果漏掉此步骤,将提示“未将对象设置到对象引用”);
     7   doc.Add(xRoot);
     8   using (SqlConnection con = new SqlConnection(constr))
     9   {
    10     using (SqlCommand cmd = con.CreateCommand())
    11     {
    12       con.Open();
    13       cmd.CommandText = sql;
    14       using (SqlDataReader reader = cmd.ExecuteReader())
    15       {
    16         if (reader.HasRows)
    17         {
    18           while (reader.Read())
    19           {
    20             int id = reader.GetInt32(0);
    21             string name = reader.GetString(1);
    22             string gender = reader.GetString(2);
    23             int age = reader.GetInt32(3);
    24             XElement xm = LoadXML(id, name, gender, age); //调用方法LoadXML
    25             xRoot.Add(xm);
    26           }
    27         }
    28       }
    29     }
    30   }
    31   doc.Save("person.xml");
    32 }
     
    第四步:写LoadXML方法:
     1 /// <summary>
     2 /// 加载XML,返回一个XElement
     3 /// </summary>
     4 public static XElement LoadXMlement(int id, string name, string gender, int age)
     5 {
     6   //创建Persons节点,并创建其下子节点:name,gender,age
     7   XElement Persons = new XElement("Person");
     8   XElement xname = new XElement("name");
     9   xname.SetValue(name);
    10   XElement xgender = new XElement("gender");
    11   xgender.SetValue(gender);
    12   XElement xage = new XElement("age");
    13   xage.SetValue(age);
    14   //为Person创建一个id属性
    15   XAttribute xid = new XAttribute("id", id.ToString());
    16   Persons.Add(xid);
    17   //加载Persons
    18   Persons.Add(xname, xgender, xage);
    19   return Persons;
    20 }
    第五步:运行项目,在bin\debug\目录下会有一个xml文档:person.xml;
     

     
    其实,大家可能也发现了,这种方法还可以更简单点:
     
     1 static void Main(string[] args)
     2 {
     3   //创建xml文档,读取数据并创建xml节点
     4   XDocument doc = new XDocument();
     5   //创建根节点
     6   XElement root = new XElement("ListOfPerson");
     7   //将根节点加载到xml中
     8   doc.Add(root);
     9   //读取数据库,创建Person节点,并加载到root中
    10   string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
    11   using (SqlConnection con = new SqlConnection(constr))
    12   {
    13     using (SqlCommand cmd = con.CreateCommand())
    14     {
    15       con.Open();
    16       cmd.CommandText = "select * from person";
    17       using (SqlDataReader reader = cmd.ExecuteReader())
    18       {
    19         if (reader.HasRows)
    20         {
    21           while (reader.Read())
    22           {
    23             XElement xPerson = new XElement("Person");
    24             XAttribute id = new XAttribute("id", reader.GetInt32(reader.GetOrdinal("id")));
    25             XElement xName = new XElement("Name", reader.GetString(reader.GetOrdinal("name")));
    26             XElement xGender = new XElement("Gender", reader.GetString(reader.GetOrdinal("gender")));
    27             XElement xAge = new XElement("Age",reader.GetInt32(reader.GetOrdinal("age")));
    28             //加载到xPerson中
    29             xPerson.Add(id,xName,xGender,xAge);
    30             root.Add(xPerson);
    31           }
    32         }
    33       }
    34     }
    35   }
    36   doc.Save("person.xml");
    37 }

     

    方法二:
    本方法才有xml序列化的知识来导出xml文档,简洁有效,而且序列化是一个非常重要的知识点。。需要多练习才能对序列化有更好的掌握!
    首先,要使用序列化需要熟悉几个基本步骤:1、要有一个对象;2、创建一个流,用来写入到文档;3、XmlSerialize
     1 static void Main(string[] args)
     2 {
     3   //1、创建一个对象
     4   List<Person> list = new List<Person>();
     5   //查询添加数据
     6   string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
     7   using (SqlConnection con = new SqlConnection(constr))
     8   {
     9     using (SqlCommand cmd = con.CreateCommand())
    10     {
    11       con.Open();
    12       cmd.CommandText = "select * from person";
    13       using (SqlDataReader reader = cmd.ExecuteReader())
    14       {
    15         if (reader.HasRows)
    16         {
    17           while (reader.Read())
    18           {
    19             list.Add(
    20             new Person()
    21             {
    22               Id = reader.GetInt32(reader.GetOrdinal("id")),
    23               Name = reader.GetString(reader.GetOrdinal("name")),
    24               Gender = reader.GetString(reader.GetOrdinal("gender")),
    25               Age = reader.GetInt32(reader.GetOrdinal("age"))
    26             }
    27             );
    28           }
    29         }
    30       }
    31     }
    32   } 
    33   using (FileStream file = new FileStream("person.xml", FileMode.Create, FileAccess.Write)) //2、创建一个流
    34   {
    35     XmlSerializer xml = new XmlSerializer(typeof(List<Person>));
    36     xml.Serialize(file, list); //开始序列化
    37   }
    38 }

     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    Tomcat version 6.0 only supports J2EE 1.2 ......
    Javascript高级编程
    Javascript基础编程の变量、对象、数据类型及函数
    Javascript基础编程の面向对象编程
    Java网络编程のTCP/IP
    Java网络编程のOSI
    redis整理の持久化机制
    redis整理の主从复制
    redis整理の安全认证
    redis整理の配置
  • 原文地址:https://www.cnblogs.com/xuquantong/p/xqt.html
Copyright © 2011-2022 走看看