SqlBulkCopy 通过泛型数组批量插入
public void SqlBulkCopy<T>(string tablename, List<T> list)
{
Type recordType = typeof(T);
PropertyInfo[] patternPInfos = recordType.GetProperties();
using (SqlConnection conn2 = new SqlConnection(connString))
{
using (SqlBulkCopy bcp = new SqlBulkCopy(conn2))
{
bcp.DestinationTableName = tablename;
DataTable tempdt = new DataTable();
foreach (var propertyInfo in patternPInfos)
{
tempdt.Columns.Add(propertyInfo.Name, propertyInfo.PropertyType);
}
foreach (var entity in list)
{
DataRow dr = tempdt.NewRow();
foreach (var propertyInfo in patternPInfos)
{
dr[propertyInfo.Name] = propertyInfo.GetValue(entity, null);
}
tempdt.Rows.Add(dr);
}
conn2.Open();
bcp.WriteToServer(tempdt);
conn2.Close();
}
}
}
===============
public T Analyze<T>(string html)
{
if (string.IsNullOrEmpty(html))
throw new Exception("传入的Html为空");
//反射
//TODO:增加缓存;
Type recordType = typeof(T);
Type patternType = this.GetType();
PropertyInfo[] patternPInfos = patternType.GetProperties();
//CreateInstance 创建指定泛型类型参数所指定类型的实例。
T record = Activator.CreateInstance<T>();
foreach (PropertyInfo patternPInfo in patternPInfos)
{
object[] customInfos = patternPInfo.GetCustomAttributes(typeof(PatternAttributes), true);
if (customInfos == null
|| customInfos.Length == 0)
continue;
PatternAttributes patternAtrributes = customInfos.GetValue(0) as PatternAttributes;
//propertyInfo.GetValue(entity,null) 获取实体的值
object patternObjVal = patternType.GetProperty(patternPInfo.Name).GetValue(this, null);
if (patternObjVal == null)
continue;
RegexColumnEntity regexColumn = (RegexColumnEntity)patternObjVal;
//如果没有写规则则跳过
if (string.IsNullOrEmpty(regexColumn.Pattern))
continue;
//提取值
object objVal = Analyze(html, regexColumn, patternAtrributes);
PropertyInfo recordProperty = recordType.GetProperty(patternPInfo.Name);
if (recordProperty != null)
{
try
{
recordProperty.SetValue(record, objVal, null);
}
catch { }
}
}
return record;
}
---------------
public void CheckValuesIsChanged(BaseAnalyzePatternEntity oldT, BaseAnalyzePatternEntity newT, MediaTypeEnum mediatype)
{
Type tType = null;
switch (mediatype)
{
case MediaTypeEnum.NetData:
oldT = oldT as WebNewsAnalyzePatternEntity;
newT = newT as WebNewsAnalyzePatternEntity;
tType = typeof(WebNewsAnalyzePatternEntity);
break;
case MediaTypeEnum.TwintterData:
oldT = oldT as WeiboAnalyzePatternEntity;
newT = newT as WeiboAnalyzePatternEntity;
tType = typeof(WeiboAnalyzePatternEntity);
break;
case MediaTypeEnum.BlogData:
oldT = oldT as BlogAnalyzePatternEntity;
newT = newT as BlogAnalyzePatternEntity;
tType = typeof(BlogAnalyzePatternEntity);
break;
case MediaTypeEnum.SEBBSData:
oldT = oldT as ForumAnalyzePatternEntity;
newT = newT as ForumAnalyzePatternEntity;
tType = typeof(ForumAnalyzePatternEntity);
break;
default:
break;
}
Type regexColumnEntity = typeof(RegexColumnEntity);
//字段属性名 频道 媒体名称
PropertyInfo[] infos = tType.GetProperties();
foreach (PropertyInfo info in infos)
{
//if (oldT != null)
//{
//字段属性值
object oldValue = info.GetValue(oldT, null);
object newValue = info.GetValue(newT, null);
if (oldValue != null)
{
//获取类型里面的方法
MethodInfo ValueInfoMethod = regexColumnEntity.GetMethod("AnalyzeToString");
//有规则字段
if (info.PropertyType.Name == "RegexColumnEntity")
{
object oldregexColumninfoValue = ValueInfoMethod.Invoke(oldValue, null);
object newregexColumninfoValue = ValueInfoMethod.Invoke(newValue, null);
if (!oldregexColumninfoValue.Equals(newregexColumninfoValue))
{
MediaRegexEntity entity = new MediaRegexEntity();
List<string> patterlist = newregexColumninfoValue.ToString().Split(new Char[] { '$', '$', '$', '$', '$' }).ToList();
entity.Pattern = patterlist[0];
entity.Options = patterlist[patterlist.Count - 1];
entity.Name = info.Name;
entity.MediaRegexStatus = newT.Status.ToString() == "1" ? true : false;//MediaRegexStatus
entity.OperatUser = newT.ModifyUser;
entity.SystemType = "AnalyzeSystem";
entity.MediaUrl = newT.WebSite;
entity.Changed = true;
entity.OperatTime = DateTime.Now;
entity.MediaType = ((MediaTypeEnum)mediatype).ToString();
entity.MediaName = newT.Name;
new Dal.MediaRegexDal().Add(entity);
}
//}
}
}
}
}
SqlBulkCopy 通过泛型数组批量插入的更多相关文章
- SqlBulkCopy与触发器,批量插入表(存在则更新,不存在则插入)
临时表:Test /****** 对象: Table [dbo].[Test] 脚本日期: 05/10/2013 11:42:07 ******/ SET ANSI_NULLS ON GO SET Q ...
- C# 批量插入表SQLSERVER SqlBulkCopy往数据库中批量插入数据
#region 帮助实例:SQL 批量插入数据 多种方法 /// <summary> /// SqlBulkCopy往数据库中批量插入数据 /// </summary> /// ...
- .net使用SqlBulkCopy类操作DataTable批量插入数据库数据,然后分页查询坑
在使用SqlBulkCopy类操作DataTable批量插入数据,这种操作插入数据的效率很高,就会导致每一条数据在保存的时间基本一样,在我们分页查询添加的数据是,使用数据的添加时间来排序就会出现每页的 ...
- php 将二维数组批量插入到数据库中
$arr = array( array(,'name'=>'ceshi4'), array(,'name'=>'ceshi5'), array(,'name'=>'ceshi6'), ...
- c# sqlbulkcopy批量插入数据
dt信息中包含数据和表名 public static void SqlBulkInsert(DataTable dt, string connStr) { try { using (var conn ...
- c# 数据库批量插入数据SqlBulkCopy 示例
/// <summary> /// 批量插入数据 /// </summary> public static void SqlBulkInsert(DataTable dt, s ...
- net core天马行空系列-各大数据库快速批量插入数据方法汇总
1.前言 hi,大家好,我是三合.我是怎么想起写一篇关于数据库快速批量插入的博客的呢?事情起源于我们工作中的一个需求,简单来说,就是有一个定时任务,从数据库里获取大量数据,在应用层面经过处理后再把结果 ...
- .Net批量插入数据
1. 一般我们普通数据插入是这样的: 现在我们写一个控制台程序用常规办法添加10000条数据. //以下是批量插入数据的办法 //连接字符串 string str = "Server=.;D ...
- EF结合SqlBulkCopy实现高效的批量数据插入 |EF插件EntityFramework.Extended实现批量更新和删除
原文链接:http://blog.csdn.net/fanbin168/article/details/51485969 批量插入 (17597条数据批量插入耗时1.7秒) using Sys ...
随机推荐
- fscanf和feof的组合使用
http://stackoverflow.com/questions/15719360/using-fscanf-using-feof 靶子代码: #include<stdio.h> vo ...
- angularJS使用内置服务
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script sr ...
- 測试赛C - Eqs(哈希)
C - Eqs Time Limit:5000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Stat ...
- mysql创建账号对应的数据库方法
增加一个用户mydb密码为123450, 让他只可以在(localhost/%)%表示可以支持远程上登录,并可以对数据库mydata5_db进行查询.插入.修改.删除的操作. grant select ...
- SSH整合简单例子
说明:简单SSH整合,struts版本2.3.32,spring版本3.2.9,hibernate版本3.6.10 一.开发步骤 1 引jar包,创建用户library.使用的包和之前博文相同,可以参 ...
- PsExec使用
01. 创建一个 Process Process.FileName ="文件路径及文件名称" Process.Arguments ="\\PC PI地址 -u 用户名 - ...
- iOS音频合并
iOS音频合并 最近遇到一个需求,客户录音试听一下可以,就继续向下录制,当客户录制完成后,需要把前面录制的试听音频和后面的音频进行合并.最初想到的方法,使用NSData对两个音频文件进行合并,但是合并 ...
- Mac上搭建直播服务器Nginx
Mac上搭建直播服务器Nginx 1.安装Homebrew,执行命令 Homebrew简称brew,是Mac OSX上的软件包管理工具,能在Mac中方便的安装软件或者卸载软件,可以说Homebrew就 ...
- JS的类型转换,强制转换和隐式转换
JS的类型转换 1.强制转换 通过String(),Number(),Boolean()函数强制转换 var str=123; var str1='123'; console.log(typeof s ...
- json-lib解析json之二维JSONArray
在接口测试中,不管是接口的请求报文还是接口的响应报文,数据全部使用json,在工作中避免不了去解析响应报文以获取某个键的值,解析josn有两种方式,一种是利用jackson,还有一种就是利用json- ...