巧用LinqToSql做数据库快速单表备份,增量更新,批量更新等的Sql语句.

不知道大家是否和我一样,经常会面临以下状况:

1、经常被迫要面对手动插入/修改/删除数据的现实,以处理非常紧急的个案.而最让我们头疼的不是SQL语法,往往是字段的数量,一个稍大一点的表里,可能涉及了几十甚至更多的字段,如果让我们手动来写一行insert代码,往往会出错,费神又费力!还很容易出错!

2、现在你手头有数据,需要紧急批量增加/更新,以同步某服务器端的老数据。而服务器又没有开放导数据的端口。

...

碰巧这些问题,我都遇到了,我很想避免出事,于是想到利用LinqToSql+System.Reflection.PropertyInfo替我来做繁琐的工作,工作量比较小,但是觉得有分享的必要。

首先我们要取得原始数据,这个数据从Linq来,这些操作就是拖拖拽拽:

例如,我有个雇员表:

List<Employee> employees = dataContext.Employees.where(c=>c.ID > 10050).ToList();

得到了要更新的数据源后,接下来就是要批量把它们写成Sql语句了,这里我直接用aspx页输出了。

foreach (Employee emp in employees){

  PropertyInfo[] allProperty = emp.GetType().GetProperties();
  string part1 = String.Empty,part2 = String.Empty;//中间需要的字段及值
      for (int i = 0; i < allProperty.Length; i++){
        object newValue = allProperty[i].GetValue(emp, null);
     string newName = allProperty[i].Name;
    part1 += newName + ",";
           part2 += "'" + newValue.ToString() + "',";
       }
       Response.Write(String.Format("insert into Employee({0}) values ({1});<br />",part1.Trim(','),part2.Trim(','))); 

}

 

好了,基本结束!

 现在可以不用担心字段的数量及其值是否对应的问题了,不过还有一个小小的问题,就是如果值里面有‘'’号,是会出错的,建议将其替换掉。

 

posted @ 2011-04-11 18:14  活跃的毛虫  阅读(1102)  评论(0编辑  收藏  举报