国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

SqlCommandBuilder類批量更新excel或者CSV數(shù)據(jù)的方法

2024-07-10 13:29:37
字體:
供稿:網(wǎng)友
這篇文章主要介紹了SqlCommandBuilder類批量更新excel或者CSV數(shù)據(jù)的方法,需要的朋友可以參考下
 

當你批量操作數(shù)據(jù)的時候,常常會使用到update table1 from table2的這種方式,這種方式是最簡潔的。
但當你從excel或者CSV文件更新海量數(shù)據(jù)時,再使用這種方法,那性能是不是好?字符串拼接又何其之多,大數(shù)據(jù)是不是需要分組更新?
我不想去檢測各種方法的速度,因為我個人比較認可以下方式,歡迎大家批評與指正。
我需要使用到的類主要是SqlCommandBuilder
 

  1. /// <param name="table">準備更新的DataTable新數(shù)據(jù)</param> 
  2.   /// <param name="TableName">對應(yīng)要更新的數(shù)據(jù)庫表名</param> 
  3.   /// <param name="primaryKeyName">對應(yīng)要更新的數(shù)據(jù)庫表的主鍵名</param> 
  4.   /// <param name="columnsName">對應(yīng)要更新的列的列名集合</param> 
  5.   /// <param name="limitColumns">需要在SQL的WHERE條件中限定的條件字符串,可為空。</param> 
  6.   /// <param name="onceUpdateNumber">每次往返處理的行數(shù)</param> 
  7.   /// <returns>返回更新的行數(shù)</returns> 
  8.   public static int Update(DataTable table, string TableName, string primaryKeyName, string[] columnsName, string limitWhere,int onceUpdateNumber) 
  9.   { 
  10.     if (string.IsNullOrEmpty(TableName)) return 0; 
  11.     if (string.IsNullOrEmpty(primaryKeyName)) return 0; 
  12.     if (columnsName == null || columnsName.Length <= 0) return 0; 
  13.     DataSet ds = new DataSet(); 
  14.     ds.Tables.Add(table); 
  15.     int result = 0; 
  16.     using (SqlConnection sqlconn = new SqlConnection(SqlHelper.ConnString)) 
  17.     { 
  18.       sqlconn.Open(); 
  19.  
  20.       //使用加強讀寫鎖事務(wù)   
  21.       SqlTransaction tran = sqlconn.BeginTransaction(IsolationLevel.ReadCommitted); 
  22.       try 
  23.       { 
  24.         foreach (DataRow dr in ds.Tables[0].Rows) 
  25.         { 
  26.           //所有行設(shè)為修改狀態(tài)   
  27.           dr.SetModified(); 
  28.         } 
  29.         //為Adapter定位目標表   
  30.         SqlCommand cmd = new SqlCommand(string.Format("select * from {0} where {1}", TableName,limitWhere), sqlconn, tran); 
  31.         SqlDataAdapter da = new SqlDataAdapter(cmd); 
  32.         SqlCommandBuilder sqlCmdBuilder = new SqlCommandBuilder(da); 
  33.         da.AcceptChangesDuringUpdate = false
  34.         string columnsUpdateSql = ""
  35.         SqlParameter[] paras = new SqlParameter[columnsName.Length]; 
  36.         //需要更新的列設(shè)置參數(shù)是,參數(shù)名為"@+列名" 
  37.         for (int i = 0; i < columnsName.Length; i++) 
  38.         { 
  39.           //此處拼接要更新的列名及其參數(shù)值 
  40.           columnsUpdateSql += ("[" + columnsName[i] + "]" + "=@" + columnsName[i] + ","); 
  41.           paras[i] = new SqlParameter("@" + columnsName[i], columnsName[i]); 
  42.         } 
  43.         if (!string.IsNullOrEmpty(columnsUpdateSql)) 
  44.         { 
  45.           //此處去掉拼接處最后一個"," 
  46.           columnsUpdateSql = columnsUpdateSql.Remove(columnsUpdateSql.Length - 1); 
  47.         } 
  48.         //此處生成where條件語句 
  49.         string limitSql = ("[" + primaryKeyName + "]" + "=@" + primaryKeyName); 
  50.         SqlCommand updateCmd = new SqlCommand(string.Format(" UPDATE [{0}] SET {1} WHERE {2} ", TableName, columnsUpdateSql, limitSql)); 
  51.         //不修改源DataTable   
  52.         updateCmd.UpdatedRowSource = UpdateRowSource.None; 
  53.         da.UpdateCommand = updateCmd; 
  54.         da.UpdateCommand.Parameters.AddRange(paras); 
  55.         da.UpdateCommand.Parameters.Add("@" + primaryKeyName, primaryKeyName); 
  56.         //每次往返處理的行數(shù) 
  57.         da.UpdateBatchSize = onceUpdateNumber; 
  58.         result = da.Update(ds,TableName); 
  59.         ds.AcceptChanges(); 
  60.         tran.Commit(); 
  61.  
  62.       } 
  63.       catch 
  64.       { 
  65.         tran.Rollback(); 
  66.       } 
  67.       finally 
  68.       { 
  69.         sqlconn.Dispose(); 
  70.         sqlconn.Close(); 
  71.       } 
  72.  
  73.  
  74.     } 
  75.     return result; 
  76.   } 
?
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 甘谷县| 南昌市| 海南省| 景泰县| 鄢陵县| 靖西县| 涿鹿县| 佛冈县| 克什克腾旗| 西城区| 开封市| 改则县| 丹寨县| 赤城县| 蕲春县| 托里县| 柯坪县| 陕西省| 长宁县| 秭归县| 阜城县| 梨树县| 石泉县| 长宁区| 东城区| 阳高县| 承德县| 土默特左旗| 临沭县| 延安市| 碌曲县| 湘西| 鲜城| 峨边| 洛宁县| 库伦旗| 界首市| 昭觉县| 满城县| 邢台市| 连云港市|