C#批量增量更新数据

方法一:建立临时表进行数据更新和插入

Step1 创建临时表

/// <summary>
/// 创建临时表存储当前需要提交的数据
/// </summary>
/// <param name="databaseConnectionString">数据库连接字符串</param>
/// <param name="tableName">当前更新导入的表名</param>
/// <returns></returns>
public static string CreateTempTable(string databaseConnectionString, string tableName)
{
   
    string tempTableName = string.Empty;
    string sql = string.Empty;
    //创建临时表存储当前需要提交的数据
    for (int i = 0; i < 20; i++)  //只是设定一个临时表的序号,如果是多台主机导入同一个数据库的时候,在数据库中可能会创建同名的临时表
    {
   
        sql = string.Format("SELECT * INTO {0} FROM {1} where 1=2", tableName + "_TEMP" + i, tableName);
        try
        {
   
            ExecuteQuery(sql, databaseConnectionString);
            tempTableName = tableName + "_TEMP" + i;
            break;
        }
        catch //如果在创建当前的临时表的过程中发生了错误,如当前临时表已经存在或者被占用,则继续通过 序号i去创建下一张临时表,直到创建成功为止
        {
   
            continue;
        }
    }
    return tempTableName;
}

Step2 临时表和数据库数据进行对比,提取数据库表中不存在的数据,然后插入当前数据库表中不存在的数据

/// <summary>
/// 将临时表和当前需要更新的表的数据进行对比,根据表内的唯一标识提取出在当前表中不存在的数据,然后批量插入新增的数据
/// </summary>
/// <param name="databaseConnectionString">数据库连接字符串</param>
/// /// <param name="dt">更新需要提交数据的datatable</param>
/// <param name="tableName">当前更新导入的表名</param>
/// <param name="tempTableName">临时表表名</param>
/// <returns></returns>
public static string GetUpdateData(string databaseConnectionString, DataTable dt, string tableName, string tempTableName)
{
   
    string errMess = string.Empty;
    try
    {
   
        string sql = string.Empty;
        string found = string.Empty;
        List<string> keyList = new List<string>();
        //提取需要批量插入的数据的唯一标识列表
        sql = string.Format("select key from {0}  except select key from {1}", tempTableName, tableName);
        found = string.Format("key= '{0}'", "@key");  //生成在当前的datatable查找的语句,key为查找的关键字,当前使用@key来代替所需的关键字
        #region 批量插入数据库中不存在的数据

        keyList = new List<string>();  //用于存储当前查询的唯一标识中在临时表中存在而在数据库表中不存在的数据列表
        keyList = GetSqlAsString(sql, null, databaseConnectionString);
        DataTable appendData = dt.Clone();
        for (int i = 0; i < keyList.Count; i++)
        {
   
            DataRow[] dr = dt.Select(found.Replace("@key", keyList[i]));
            foreach (var row in dr)
            {
   
                appendData.ImportRow(row);
            }
        }
        SqlBulkCopyByDatatable(databaseConnectionString, tableName, appendData);
        #endregion
        return errMess;
    }
    catch (Exception ex)
    {
   
        errMess = ex.Message;
        return errMess;
    }
}

Step3 根据临时表更新当前导入表的数据

/// <summary>
/// 根据临时表更新当前导入表的数据
/// </summary>
/// <param name="databaseConnectionString">数据库连接字符串</param>
/// <param name="tableName">当前更新导入的表名</param>
/// <pa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值