控件中国网现已改版,您看到的是老版本网站的镜像,系统正在为您跳转到新网站首页,请稍候.......
中国最专业的商业控件资讯网产品咨询电话:023-67870900 023-67871946
产品咨询EMAIL:SALES@COMPONENTCN.COM

c#操作xml文件与数据库配合进行数据导入导出

作者:未知 出处:cnblog 2013年05月09日 阅读:

 一、将数据库中内容读取到xml文件中,如下是一个很简单的Demo

 
private static void Main(string[] args)
         {
            
             //连接字符串
             string connStr = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;
             string sql = string.Format("select * from dbo.StudentInfo");
             DataSet ds = new DataSet();
             using (SqlDataAdapter sda = new SqlDataAdapter(sql, connStr))
             {
                 sda.Fill(ds);
             }
             ds.WriteXml("b.xml");//将读出来的内容写到一个xml文件中
             Console.WriteLine("执行成功");
             Console.ReadKey();
         }
其中,DataAdapter主要是在数据源以及DataSet之间执行数据传输的工作,它可以透过Command对象下达命令后将取得
 
 的数据放入到DataSet中,这个对象时架构在Command对象上,并提供了许多配合DataSet的使用功能。DataSet可以看做是一
 
个暂存区(Cache)可以把从数据库中所查询到的数据保留起来,也可以将整个数据库显示出来,DataSet是放在内存中的,它的能
 
力不仅仅可以存储多个Table,DataAdapter可以看做是DataSet与数据进行沟通的桥梁,DataSet包含若干个DataTable,DataTable
 
包含若干个DataRow.
 
       xml文件的格式为:
 
<?xml version="1.0" standalone="yes"?>
 <NewDataSet>
   <Table>
     <StuId>1</StuId>
     <ClassId>1</ClassId>
     <LoginName>William</LoginName>
     <NickName>威廉</NickName>
     <AddTime>2013-03-23T17:45:40.77+08:00</AddTime>
     <DelFlag>false</DelFlag>
     <Remark>我是技术部的一名员工</Remark>
   </Table>
 </NewDataSet>
如果不使用DataSet,也可以这样来创建一个xml文件:
 
private static void Main(string[] args)
         {
            string connStr = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;
             string sql = string.Format("select * from dbo.StudentInfo");
             //我们创建的xml文件的根节点是tblStudent,节点属性是id,属性值是StudentInfo
             XDocument doc = new XDocument(new XElement("tblStudent",new XAttribute("id","StudentInfo")));
                 XElement root = doc.Root;
                 using (SqlConnection conn = new SqlConnection(connStr))
                 {
                     using (SqlCommand cmd = new SqlCommand(sql,conn))
                     {
                         conn.Open();
                         using (SqlDataReader Reader = cmd.ExecuteReader())
                         {
                            if (Reader.HasRows)
                            {
                                while (Reader.Read())
                                {
 
                                    int filedCount = Reader.FieldCount;
                                    //从根节点下创建元素XElement对象,即展示在页面上就是创建元素,该元素的属性有StuId,值为Reader[0]中的值。
                                    //创建的该元素的子元素为ClassId,文本值为Reader[1]的值
                                       XElement ele=new XElement("student",new XAttribute("StuId",Reader[0]),new XElement("ClassId",Reader[1]));
                                      doc.Root.Add(ele);
 
                                }
                            }
                         }
                     }
                     doc.Save("a.xml");//将所创建的一系列节点保存在a.xml文件中
                     Console.WriteLine("成功");
                     Console.ReadKey();
                 }
             }
在如上所得的代码中,得到的xml文件中的内容为
 
<?xml version="1.0" encoding="utf-8"?>
<tblStudent id="StudentInfo">
<student StuId="1">
<ClassId>1</ClassId>
</student>
</tblStudent>
(二)将xml文件数据读取到数据库中,首先我们来观察一下.xml文件的格式,我只选取了其中几条数据:
<?xml version="1.0" encoding="utf-8"?>
 <Provinces>
   <Province ID="1" ProvinceName="北京市">北京市</Province>
   <Province ID="2" ProvinceName="天津市">天津市</Province>
   <Province ID="3" ProvinceName="河北省">河北省</Province>
   <Province ID="4" ProvinceName="山西省">山西省</Province>
 </Provinces>
这里本来应该是三个文件,一个是Cities.xml,一个是Districts.xml,一个是Provinces.xml,由于文件太长,我们只列举一个:
 
using System;
 using System.Collections.Generic;
 using System.Configuration;
 using System.Data;
 using System.Data.SqlClient;
 using System.Linq;
 using System.Net.Mime;
 using System.Text;
 using System.Threading.Tasks;
 using System.Xml.Linq;
 
 namespace aaaaad
 {
     internal class Program
     {
         private static void Main(string[] args)
         {
             ImportDatabase("ProvinceName", "CID", "dbo.AreaFull", "Provinces.xml");
         }
 
         static void  ImportDatabase (string s2, string s3, string s4, string filename) //保存的参数需要有节点的属性
             {
                 string connstr = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;
                 string sql = string.Format("insert into {0}(AreaName,AreaPid)  values(@AreaName,@AreaPid)", s4);
                 XDocument provinceDoc = XDocument.Load(filename);//构造一个xml文档对象
                 XElement provinceroot = provinceDoc.Root;//获取文档对象的根节点
                 //获取根节点下的所有元素,返回的是一个IEnumerable类型的
                 IEnumerable<XElement> eles = provinceroot.Elements(); 
                 using (SqlConnection conn = new SqlConnection(connstr))
                 {
                     conn.Open();
                     using (SqlCommand cmd = new SqlCommand(sql, conn))
                     {
                         int count = 0;
                         foreach (var xElement in eles)
                         {
                             cmd.Parameters.Clear(); //因为我们使用的是一个cmd,说明里面的参数是一样的
                             //下面这些参数我们要与数据库进行一一对应
                             string AreaName = xElement.Attribute(s2).Value; //获取xml属性名称为s2的属性值
                             string AreaPid = "";
                             //如果xml属性名称为s3的属性的属性值为null时进行的操作,其实主要是针对省进行的操作
                             if (xElement.Attribute(s3) == null)
                             {
                                 AreaPid = "0";
                             }
                             else
                             {
                                 AreaPid = xElement.Attribute(s3).Value;
                             }
                             SqlParameter[] parameters =
                                 {
                                     new SqlParameter("@AreaName", AreaName),
                                     new SqlParameter("@AreaPid", AreaPid)
                                 };
                             cmd.Parameters.AddRange(parameters);
                             cmd.ExecuteNonQuery();
                             count++;
                             Console.WriteLine(count);
 
                         }
 
                     }
                 }
                 Console.WriteLine("ok");
                 Console.ReadKey();
             }
 
            
         }
     }
c#还可以通过htmlDocument操作HTML节点,与c#操作xml有这异曲同工之处,值得注意的是,在我们写代码的时候千万不要按
 
照我的这种思路写,我只是不想把SQLHelper.cs这个类的代码放进来,很长,我们写这部分代码时应注意的问题是:参数化查询,使
 
用SQLHelper调用其中的方法,配置连接字符串
 

热推产品

  • ActiveReport... 强大的.NET报表设计、浏览、打印、转换控件,可以同时用于WindowsForms谀坔攀戀Forms平台下......
  • AnyChart AnyChart使你可以创建出绚丽的交互式的Flash和HTML5的图表和仪表控件。可以用于仪表盘的创......
首页 | 新闻中心 | 产品中心 | 技术文档 | 友情连接 | 关于磐岩 | 技术支持中心 | 联系我们 | 帮助中心 Copyright-2006 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 电话:023 - 67870900 传真:023 - 67870270 产品咨询:sales@componentcn.com 渝ICP备12000264号 法律顾问:元炳律师事务所 重庆市江北区塔坪36号维丰创意绿苑A座28-5 邮编:400020
在线客服
在线客服系统
在线客服
在线客服系统