将数据库表中的数据导出到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 }

 


 
 
 
 
 
 
 
 
 
 
 
 
 
posted @ 2012-09-19 02:15  许全通  阅读(1533)  评论(0编辑  收藏  举报