读取接口XML和批量导入数据SqlBulkCopy
首先是C#处理xml文档
string urlStr = string.Format("http://……?timeBeg={0}&timeEnd={1}", timeBeg, timeEnd);
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(urlStr);//加载xml
工作中遇到的xml文档在根元素的第一个节点(state)都会返回此次接口是否返回正常,所以首先要获取xml根元素
XmlElement root = xmlDoc.DocumentElement;//获取xml根元素
int state = Convert.ToInt32(root.FirstChild.InnerText);
判断state值
获取返回xml中需要的XMLNodeList
XmlNodeList xnlchannel= xmlDoc.SelectNodes("root/data/channel");
然后准备datatable,处理datatable中字段的字段名和数据类型
DataTable dt = new DataTable();
dt.Columns.Add("DataDate", typeof(DateTime));
dt.Columns.Add("ProductType", typeof(string));
DataRow dr = null;
由xnlchannel只是返回所有频道,每个人又有自己的信息
foreach (XmlNode node in xnlchannel)
{
string date = node.SelectSingleNode("date").InnerText;
XmlNodeList xnlchanneldata = node.SelectNodes("channeldata");
for (int i = ; i < xnlchanneldata.Count; i++)
{
string producttype = xnlchanneldata[i].SelectSingleNode("chnneltype").InnerText;
XmlNodeList basicnode = xnlchanneldata[i].SelectNodes("detail/nodedata");
foreach (XmlNode nd in basicnode)
{
dr = dt.NewRow();
dr[] = Convert.ToDateTime(date);
dr[] = producttype;
dr[] = nd.SelectSingleNode("nodenme").InnerText;
……
dr[] = DateTime.Now;
dt.Rows.Add(dr);
}
}
}
数据放入datatable之后,就要批量导入了
public static bool InsertLogUser(DataTable dt)
{
if (dt != null && dt.Rows.Count > )
{
dt.TableName = "Tj_PageCount";//数据库中的表名
SQLHelper DB = new SQLHelper(Config.WebMonitorWrite);
DB.Open();
List<SqlBulkCopyColumnMapping> ColumnMappings = new List<SqlBulkCopyColumnMapping>() {
new SqlBulkCopyColumnMapping("DataDate","DataDate"),
new SqlBulkCopyColumnMapping("ProductType","ProductType"),
……
new SqlBulkCopyColumnMapping("UpdateTime","UpdateTime") }; bool a = DB.SqlBulkCopy(dt, ColumnMappings);
return a;
}
return true;
}
public bool SqlBulkCopy(DataTable dt, List<SqlBulkCopyColumnMapping> ColumnMappings)
{
SqlBulkCopy sqlbulk = new SqlBulkCopy(this.MyConnStr, SqlBulkCopyOptions.UseInternalTransaction);
try
{
sqlbulk.NotifyAfter = dt.Rows.Count;
sqlbulk.BulkCopyTimeout = ;
//目标数据库表名
sqlbulk.DestinationTableName = dt.TableName;
//数据集字段索引与数据库字段索引映射 foreach (SqlBulkCopyColumnMapping item in ColumnMappings)
{
sqlbulk.ColumnMappings.Add(item);
} //导入
sqlbulk.WriteToServer(dt);
sqlbulk.Close();
return true;
}
catch
{
return false;
}
finally
{
sqlbulk.Close();
dt.Dispose();
this.Close();
}
}
源代码在百度云
读取接口XML和批量导入数据SqlBulkCopy的更多相关文章
- C#中大批量导入数据SqlBulkCopy
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...
- csv文件批量导入数据到sqlite。
csv文件批量导入数据到sqlite. 代码: f = web.input(bs_switch = {}) # bs_switch 为from表单file字段的namedata =[i.split( ...
- 意外发现的大批量导入数据SqlBulkCopy类
因为要做一个号码归属地查询小功能,因为要导入外部(文本文件)的电话归属地数据,使用的是SqlDataAdapter类,数据不多,只四万有多条,表也只有一个,phoneBook表,使用的是DataTab ...
- Cassandra使用pycassa批量导入数据
本周接手了一个Cassandra系统的维护工作,有一项是需要将应用方的数据导入我们维护的Cassandra集群,并且为应用方提供HTTP的方式访问服务.这是我第一次接触KV系统,原来只是走马观花似的看 ...
- 项目总结04:SQL批量导入数据:将具有多表关联的Excel数据,通过sql语句脚本的形式,导入到数据库
将具有多表关联的Excel数据,通过sql语句脚本的形式,导入到数据库 写在前面:本文用的语言是java:数据库是MySql: 需求:在实际项目中,经常会被客户要求,做批量导入数据:一般的简单的单表数 ...
- java使用POI实现Excel批量导入数据
1.准备工作 1.1 创建模板表头与数据库表字段一一对应,示例如下 1.2将模板放入项目中,如下图所示: 2.前端页面 2.1 使用超链接提供模板下载地址 <html lang="zh ...
- 使用python向Redis批量导入数据
1.使用pipeline进行批量导入数据.包含先使用rpush插入数据,然后使用expire改动过期时间 class Redis_Handler(Handler): def connect(self) ...
- Redis批量导入数据的方法
有时候,我们需要给redis库中插入大量的数据,如做性能测试前的准备数据.遇到这种情况时,偶尔可能也会懵逼一下,这里就给大家介绍一个批量导入数据的方法. 先准备一个redis protocol的文件( ...
- 批量导入数据到mssql数据库的
概述 批量导入数据到数据库中,我们有好几种方式. 从一个数据表里生成数据脚本,到另一个数据库里执行脚本 从EXCEL里导入数据 上面两种方式,导入的数据都会生成大量的日志.如果批量导入5W条数据到数据 ...
随机推荐
- 矿场搭建(codevs 1996)
题目描述 Description 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤点设立救援出口,使 ...
- 开启后台 Service 闪退
04-29 15:36:23.395: E/ActivityThread(15275): Performing stop of activity that is not resumed: {com.e ...
- springmvc注解配置
<?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="http://www.s ...
- Redis简介、与memcached比较、存储方式、应用场景、生产经验教训、安全设置、key的建议、安装和常用数据类型介绍、ServiceStack.Redis使用(1)
1.NOSQL简介 nosql的产生并不是要彻底的代替关系型数据库,而是作为传统关系型数据库的一个补充. Facebook和360使用Cassandra来存储海量社交数据 Twitter在其url抓取 ...
- Delphi的TThread中的FreeOnTerminate成员
类 Create 了就要 Free; 但 TThread(的子类) 有特殊性, 很多时候我们不能确定新建的线程什么时候执行完(也就是什么时候该释放); 如果线程执行完毕自己知道释放就好了, 所以 ...
- Delphi之DLL知识学习2---静态链接和动态链接
静态连接 静态链接是指Delphi 编译器把要调用的函数和过程编译成可执行代码.函数的代码可存留在应用程序的 .dpr文件或一单元中.当链接用户的应用程序时,这些函数与过程便成为最终的可执行文件的一部 ...
- Pyqt 设置 背景颜色和背景图片、 QPalette 调色板 与QPainter 画板区别 、 不规则图片
设置 背景颜色和背景图片 首先设置autoFillBackground属性为真然后定义一个QPalette对象设置QPalette对象的背景属性(颜色或图片)最后设置QWidget对象的Palette ...
- 【JAVA与XML、dtd约束、Schema约束】
一.XML. (1)XML:Extensible Markup Language (2)XML是一种标记语言. (3)XML的设计宗旨是传输数据,而不是显示数据. (4)XML标签没有被预定义,即使用 ...
- ACM训练计划建议(写给本校acmer,欢迎围观和指正)
ACM训练计划建议 From:freecode# Date:2015/5/20 前言: 老师要我们整理一份训练计划给下一届的学弟学妹们,整理出来了,费了不少笔墨,就也将它放到博客园上供大家参考. 菜 ...
- 攻城狮在路上(叁)Linux(十八)--- 文件系统的简单操作
本篇仅作为补漏. 一.查看磁盘和目录的容量:df du df:列出文件系统的整体磁盘使用量. du:评估文件系统的磁盘使用量(常用于评估目录所占容量) 二.连接文件:ln 1.hard link:硬 ...