大量数据写入数据库方法:SqlServer优化之批量插入(SqlBulkCopy、表值参数)

#region 获取 本周、本月、本季度、本年 的开始时间或结束时间
/// <summary>
/// 获取开始时间
/// </summary>
/// <param name="TimeType">Week、Month、Season、Year</param>
/// <param name="now"></param>
/// <returns>2017-01-01 00:00:00</returns>
public static DateTime? GetTimeStartByType(string TimeType, DateTime now)
{
switch (TimeType)
{
case "Week":
return now.AddDays(-(now.DayOfWeek == ? : (int)now.DayOfWeek) + ).Date;
case "Month":
return now.AddDays(-now.Day + ).Date;
case "Season":
var time = now.AddMonths( - ((now.Month - ) % ));
return time.AddDays(-time.Day + ).Date;
case "Year":
return now.AddDays(-now.DayOfYear + ).Date;
default:
return null;
}
} /// <summary>
/// 获取结束时间
/// </summary>
/// <param name="TimeType">Week、Month、Season、Year</param>
/// <param name="now"></param>
/// <returns>2017-12-31 23:59:59</returns>
public static DateTime? GetTimeEndByType(string TimeType, DateTime now)
{
DateTime dt = new DateTime();
switch (TimeType)
{
case "Week":
dt = now.AddDays( - (now.DayOfWeek == ? : (int)now.DayOfWeek)).Date; break;
case "Month":
dt = now.AddMonths().AddDays(-now.AddMonths().Day + ).AddDays(-).Date; break;
case "Season":
var time = now.AddMonths(( - ((now.Month - ) % ) - ));
dt = time.AddMonths().AddDays(-time.AddMonths().Day + ).AddDays(-).Date; break;
case "Year":
var time2 = now.AddYears();
dt = time2.AddDays(-time2.DayOfYear).Date; break;
default:
return null;
}
return dt.AddDays().AddSeconds(-);
}
#endregion
//ashx页面下调用多种方法

        public void ProcessRequest(HttpContext context)
{
var dataType = context.Request["DataType"];
var keyid = context.Request["Keyid"]; var cMethod = string.Format("Get{0}", dataType);
var tp = typeof(DataFetch);
var mi = tp.GetMethod(cMethod);
if (mi != null)
{
mi.Invoke(Activator.CreateInstance(tp), new object[] { context, keyid });
}
} /// <summary>
/// 获取用户信息
/// </summary>
/// <param name="keyid"></param>
public void GetUser(HttpContext context, string keyid)
{ var context = HttpContext.Current;
//var param = context.Request["Param"]; context.WriteJson(json); }
/*泛型转换*/
/// <summary>
/// 获取视图状态的属性值
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="stateName">视图状态名称</param>
/// <param name="defauleValue">默认值</param>
public T GetState<T>(string stateName, T defauleValue)
{
T m_Value = defauleValue;
if (ViewState[stateName] != null)
{
m_Value = (T)ViewState[stateName];
}
return m_Value;
} /// <summary>
/// 获取视图状态的属性值
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="stateName">视图状态名称</param>
public T GetState<T>(string stateName)
{
return GetState<T>(stateName, default(T));
} private List<T_AberRedSetInfo> listAberRedSet
{
get { return this.GetState<List<T_AberRedSetInfo>>("T_AberRedSet"); }
set { this.SetState("T_AberRedSet", value); }
}

强制对所有代进行即时垃圾回收 GC.Collect();

深度拷贝与浅复制

///复制List--当然前题是List中的对象要实现ICloneable接口
public static IList<T> Clone<T>(this IList<T> listToClone) where T: ICloneable
{
return listToClone.Select(item => (T)item.Clone()).ToList();
}
 #region Object拓展,深复制,对象转换
/// <summary>
/// 深复制,就是完全复制Clone,代替ICloneable接口
/// </summary>
/// <param name="oSource"></param>
/// <returns></returns>
public static T DeepCopy<T>(this T oSource)
{
T oClone;
DataContractSerializer dcs = new DataContractSerializer(typeof(T));
using (MemoryStream ms = new MemoryStream())
{
dcs.WriteObject(ms, oSource);
ms.Position = ;
oClone = (T)dcs.ReadObject(ms);
}
return oClone;
} /// <summary>
/// 将Object对象转换为目标对象,一般用于匿名对象转换。
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <param name="t"></param>
/// <returns></returns>
public static T ChangeObjectType<T>(this object obj, T t)
{
return (T)obj;
}
#endregion
[Serializable]
public class InvoiceDetailResponse : IDeepCopy, IShallowCopy
{ public Guid merchant_id { get; set; }
/// <summary>
/// 名称
/// </summary>
public string uname { get; set; } /// <summary>
/// 浅拷贝
/// </summary>
/// <returns></returns>
public object ShallowCopy()
{
return this.MemberwiseClone();
}
/// <summary>
/// 深拷贝 【不建议使用二进制流方法,此方法即使在类前面加了可序列化标志,调用该方法时也会报未序列化错误】,推荐使用反射方式
/// </summary>
/// <returns></returns>
public object DeepCopy()
{
using (MemoryStream stream = new MemoryStream())
{
BinaryFormatter bFormatter = new BinaryFormatter();
bFormatter.Serialize(stream, this);
stream.Seek(, SeekOrigin.Begin);
return (InvoiceDetailResponse)bFormatter.Deserialize(stream);
}
}
}
/// <summary>
/// 深拷贝接口
/// </summary>
interface IDeepCopy
{
object DeepCopy();
} /// <summary>
/// 浅拷贝接口
/// </summary>
interface IShallowCopy
{
object ShallowCopy();
}
///利用反射实现
public static T DeepCopyByReflection<T>(T obj)
{
  if (obj is string || obj.GetType().IsValueType)
  return obj;   object retval = Activator.CreateInstance(obj.GetType());
  FieldInfo[] fields = obj.GetType().GetFields(BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Static|BindingFlags.Instance);
  foreach(var field in fields)
  {
    try
    {
      field.SetValue(retval, DeepCopyByReflection(field.GetValue(obj)));
    }
    catch { }
  }   return (T)retval;
}
public static T Clone<T>(T RealObject) 

{
using (Stream objectStream = new MemoryStream())
{
//利用 System.Runtime.Serialization序列化与反序列化完成引用对象的复制
IFormatter formatter = new BinaryFormatter();
formatter.Serialize(objectStream, RealObject);
objectStream.Seek(, SeekOrigin.Begin);
return (T)formatter.Deserialize(objectStream);
}
}

#region Object拓展,深复制,对象转换        /// <summary>        /// 深复制,就是完全复制Clone,代替ICloneable接口        /// </summary>        /// <param name="oSource"></param>        /// <returns></returns>        public static T DeepCopy<T>(this T oSource)        {            T oClone;            DataContractSerializer dcs = new DataContractSerializer(typeof(T));            using (MemoryStream ms = new MemoryStream())            {                dcs.WriteObject(ms, oSource);                ms.Position = 0;                oClone = (T)dcs.ReadObject(ms);            }            return oClone;        }
        /// <summary>        /// 将Object对象转换为目标对象,一般用于匿名对象转换。        /// </summary>        /// <typeparam name="T"></typeparam>        /// <param name="obj"></param>        /// <param name="t"></param>        /// <returns></returns>        public static T ChangeObjectType<T>(this object obj, T t)        {            return (T)obj;        }        #endregion

asp.net技术(公共方法)的更多相关文章

  1. ASP.NET一些公共方法commTools

    using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Secu ...

  2. web开发过程中经常用到的一些公共方法及操作

    进化成为程序猿也有段岁月了,所谓的经验,广度还是依旧,只不过是对于某种功能有了多种实现方式的想法.每天依旧不厌其烦的敲打着代码,每一行代码的回车似乎都有一种似曾相识的感觉.于是乎:粘贴复制,再粘贴再复 ...

  3. [Guava官方文档翻译] 5. Guava的Object公共方法 (Common Object Utilities Explained)

    我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3537367.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...

  4. (转)探讨:ASP.NET技术的学习顺序问题

    探讨:ASP.NET技术的学习顺序问题 摘要:很多人对于ASP.NET的入门和学习顺序比较迷茫,今天让我们一起来跟随作者的思路学习探讨ASP.NET的学习顺序问题,希望有所帮助. 如果你已经有较多的面 ...

  5. 【转】探讨:ASP.NET技术的学习顺序问题

    摘要:很多人对于ASP.NET的入门和学习顺序比较迷茫,今天让我们一起来跟随作者的思路学习探讨ASP.NET的学习顺序问题,希望有所帮助. 如果你已经有较多的面向对象开发经验,跳过以下这两步: 第一步 ...

  6. ASP.NET技术总结

    ASP.NET是ASP相关技术的最新版本,它如何工作: (经典)ASP的后缀名是".asp",通常用VB编写:ASP.NET是".aspx"—— ASP.NET ...

  7. ASP程序加密/解密方法大揭密

      如今,用ASP技术构建的网站随处可见.由于ASP脚本是在服务器上解释执行的(无法编译),因此你辛苦开发出来的ASP代码,很容易被人拷去任意修改,如何保护ASP源代码呢?这是每个ASP站长都会遇到的 ...

  8. J2EE项目开发中常用到的公共方法

    在项目IDCM中涉及到多种工单,包括有:服务器|网络设备上下架工单.服务器|网络设备重启工单.服务器光纤网线更换工单.网络设备撤线布线工单.服务器|网络设备替换工单.服务器|网络设备RMA工单.通用原 ...

  9. php 图片上传的公共方法(按图片宽高缩放或原图)

    写的用于图片上传的公共方法类调用方法: $upload_name='pic';$type = 'logo_val';$file_name = 'logo_' . $user_id .create_st ...

  10. 【ASP.NET实战教程】基于ASP.NET技术下多用户博客系统全程实战开发(NNblog)

    岁末主推:牛牛老师主讲,多用户博客系统,基于ASP.NET技术,年后将带来移动业务平台项目项目目标: 打造个性品牌Blogo,定制多用户博客 为每一个博客用户提供个性化的 blogo解决方案,打造精品 ...

随机推荐

  1. 《DSP using MATLAB》Problem 8.9

    代码: %% ------------------------------------------------------------------------ %% Output Info about ...

  2. java基础之Date类

    Date类: Date类概述 类 Date 表示特定的瞬间,精确到毫秒. 构造方法 public Date() public Date(long date) 成员方法 public long getT ...

  3. vue swiper点击后返回不能自动播放

    解决方法: 在返回时重新开启轮播 组件中: <swiper :options="swiperOption" ref="mySwiper" :class=& ...

  4. HBase 数据坐标

  5. [转]Expression Blend实例中文教程(8) - 动画设计快速入门StoryBoard

    上一篇,介绍了Silverlight动画设计基础知识,Silverlight动画是基于时间线的,对于动画的实现,其实也就是对对象属性的修改过程. 而Silverlight动画分类两种类型,From/T ...

  6. mapreduce.Job: Running job: job_1553100392548_0001

    这几天一直在尝试一个mapreduce的例子,但是一直都是卡在mapreduce.Job: Running job: job_1553100392548_0001,查看日志也不报错,查看每个配置文件没 ...

  7. 洛谷p1605--迷宫 经典dfs

    https://www.luogu.org/problemnew/show/P1605 用这种题来复习一下dfs 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和终点坐标,问 ...

  8. LRU Cache数据结构简介

    什么是LRU Cache LRU是Least Recently Used的缩写,意思是最近最少使用,它是一种Cache替换算法. 什么是Cache?狭义的Cache指的是位于CPU和主存间的快速RAM ...

  9. java 在线拆分 word文档采用什么技术比较好?

    在Java项目开发中,偶尔会遇到通过程序动态拆分word文档的需求,由于Java本身不能操作Word文档,在网上也都是讨论如何动态合并word,所以这个需求实现起来相当困难,下面就将近期对于Word文 ...

  10. js前台中获取后台传的值

    后台controller String ifOffice = "yes";req.setAttribute("ifOffice", ifOffice); 前台j ...