zoukankan      html  css  js  c++  java
  • c#操作xml文件与数据库配合进行数据导入导出

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

     1  private static void Main(string[] args)
     2         {
     3            
     4             //连接字符串
     5             string connStr = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;
     6             string sql = string.Format("select * from dbo.StudentInfo");
     7             DataSet ds = new DataSet();
     8             using (SqlDataAdapter sda = new SqlDataAdapter(sql, connStr))
     9             {
    10                 sda.Fill(ds);
    11             }
    12             ds.WriteXml("b.xml");//将读出来的内容写到一个xml文件中
    13             Console.WriteLine("执行成功");
    14             Console.ReadKey();
    15         }

            其中,DataAdapter主要是在数据源以及DataSet之间执行数据传输的工作,它可以透过Command对象下达命令后将取得

     的数据放入到DataSet中,这个对象时架构在Command对象上,并提供了许多配合DataSet的使用功能。DataSet可以看做是一

    个暂存区(Cache)可以把从数据库中所查询到的数据保留起来,也可以将整个数据库显示出来,DataSet是放在内存中的,它的能

    力不仅仅可以存储多个Table,DataAdapter可以看做是DataSet与数据进行沟通的桥梁,DataSet包含若干个DataTable,DataTable

    包含若干个DataRow.

           xml文件的格式为:

     1 <?xml version="1.0" standalone="yes"?>
     2 <NewDataSet>
     3   <Table>
     4     <StuId>1</StuId>
     5     <ClassId>1</ClassId>
     6     <LoginName>William</LoginName>
     7     <NickName>威廉</NickName>
     8     <AddTime>2013-03-23T17:45:40.77+08:00</AddTime>
     9     <DelFlag>false</DelFlag>
    10     <Remark>我是技术部的一名员工</Remark>
    11   </Table>
    12 </NewDataSet>

       如果不使用DataSet,也可以这样来创建一个xml文件:

     1        private static void Main(string[] args)
     2         {
     3            string connStr = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;
     4             string sql = string.Format("select * from dbo.StudentInfo");
     5             //我们创建的xml文件的根节点是tblStudent,节点属性是id,属性值是StudentInfo
     6             XDocument doc = new XDocument(new XElement("tblStudent",new XAttribute("id","StudentInfo")));
     7                 XElement root = doc.Root;
     8                 using (SqlConnection conn = new SqlConnection(connStr))
     9                 {
    10                     using (SqlCommand cmd = new SqlCommand(sql,conn))
    11                     {
    12                         conn.Open();
    13                         using (SqlDataReader Reader = cmd.ExecuteReader())
    14                         {
    15                            if (Reader.HasRows)
    16                            {
    17                                while (Reader.Read())
    18                                {
    19 
    20                                    int filedCount = Reader.FieldCount;
    21                                    //从根节点下创建元素XElement对象,即展示在页面上就是创建元素,该元素的属性有StuId,值为Reader[0]中的值。
    22                                    //创建的该元素的子元素为ClassId,文本值为Reader[1]的值
    23                                       XElement ele=new XElement("student",new XAttribute("StuId",Reader[0]),new XElement("ClassId",Reader[1]));
    24                                      doc.Root.Add(ele);
    25 
    26                                }
    27                            }
    28                         }
    29                     }
    30                     doc.Save("a.xml");//将所创建的一系列节点保存在a.xml文件中
    31                     Console.WriteLine("成功");
    32                     Console.ReadKey();
    33                 }
    34             }

      在如上所得的代码中,得到的xml文件中的内容为

    1 <?xml version="1.0" encoding="utf-8"?>
    2 <tblStudent id="StudentInfo">
    3   <student StuId="1">
    4     <ClassId>1</ClassId>
    5   </student>
    6 </tblStudent>

    (二)将xml文件数据读取到数据库中,首先我们来观察一下.xml文件的格式,我只选取了其中几条数据:

    1 <?xml version="1.0" encoding="utf-8"?>
    2 <Provinces>
    3   <Province ID="1" ProvinceName="北京市">北京市</Province>
    4   <Province ID="2" ProvinceName="天津市">天津市</Province>
    5   <Province ID="3" ProvinceName="河北省">河北省</Province>
    6   <Province ID="4" ProvinceName="山西省">山西省</Province>
    7 </Provinces>

          这里本来应该是三个文件,一个是Cities.xml,一个是Districts.xml,一个是Provinces.xml,由于文件太长,我们只列举一个:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Configuration;
     4 using System.Data;
     5 using System.Data.SqlClient;
     6 using System.Linq;
     7 using System.Net.Mime;
     8 using System.Text;
     9 using System.Threading.Tasks;
    10 using System.Xml.Linq;
    11 
    12 namespace aaaaad
    13 {
    14     internal class Program
    15     {
    16         private static void Main(string[] args)
    17         {
    18             ImportDatabase("ProvinceName", "CID", "dbo.AreaFull", "Provinces.xml");
    19         }
    20 
    21         static void  ImportDatabase (string s2, string s3, string s4, string filename) //保存的参数需要有节点的属性
    22             {
    23                 string connstr = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;
    24                 string sql = string.Format("insert into {0}(AreaName,AreaPid)  values(@AreaName,@AreaPid)", s4);
    25                 XDocument provinceDoc = XDocument.Load(filename);//构造一个xml文档对象
    26                 XElement provinceroot = provinceDoc.Root;//获取文档对象的根节点
    27                 //获取根节点下的所有元素,返回的是一个IEnumerable类型的
    28                 IEnumerable<XElement> eles = provinceroot.Elements(); 
    29                 using (SqlConnection conn = new SqlConnection(connstr))
    30                 {
    31                     conn.Open();
    32                     using (SqlCommand cmd = new SqlCommand(sql, conn))
    33                     {
    34                         int count = 0;
    35                         foreach (var xElement in eles)
    36                         {
    37                             cmd.Parameters.Clear(); //因为我们使用的是一个cmd,说明里面的参数是一样的
    38                             //下面这些参数我们要与数据库进行一一对应
    39                             string AreaName = xElement.Attribute(s2).Value; //获取xml属性名称为s2的属性值
    40                             string AreaPid = "";
    41                             //如果xml属性名称为s3的属性的属性值为null时进行的操作,其实主要是针对省进行的操作
    42                             if (xElement.Attribute(s3) == null)
    43                             {
    44                                 AreaPid = "0";
    45                             }
    46                             else
    47                             {
    48                                 AreaPid = xElement.Attribute(s3).Value;
    49                             }
    50                             SqlParameter[] parameters =
    51                                 {
    52                                     new SqlParameter("@AreaName", AreaName),
    53                                     new SqlParameter("@AreaPid", AreaPid)
    54                                 };
    55                             cmd.Parameters.AddRange(parameters);
    56                             cmd.ExecuteNonQuery();
    57                             count++;
    58                             Console.WriteLine(count);
    59 
    60                         }
    61 
    62                     }
    63                 }
    64                 Console.WriteLine("ok");
    65                 Console.ReadKey();
    66             }
    67 
    68            
    69         }
    70     }

        在数据库中数据的变化情况如下图:

        c#还可以通过htmlDocument操作HTML节点,与c#操作xml有这异曲同工之处,值得注意的是,在我们写代码的时候千万不要按

    照我的这种思路写,我只是不想把SQLHelper.cs这个类的代码放进来,很长,我们写这部分代码时应注意的问题是:参数化查询,使

    用SQLHelper调用其中的方法,配置连接字符串。

            

  • 相关阅读:
    CAP分布式
    专职DBA-MySQL数据库开篇
    os.sep
    DocStrings
    Python如何获取脚本的参数
    LVM基础命令
    VoAndEntityTrans
    短信倒计时
    springboot在eclipse上搭建项目一(无页面)
    springboot问题
  • 原文地址:https://www.cnblogs.com/hanwenhuazuibang/p/3067842.html
Copyright © 2011-2022 走看看