巧用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(',')));
}
好了,基本结束!
现在可以不用担心字段的数量及其值是否对应的问题了,不过还有一个小小的问题,就是如果值里面有‘'’号,是会出错的,建议将其替换掉。