C#造福大家
不管什么數據,只要沾上大數據,效率,快速,批量 都是一件很讓人頭疼的事情。
尤其是遇到了Access這種數據庫。
這個沒有什么好的辦法,只好一條一條的寫SQL插入了。
在這提供2種思路。第一種是寫事物去處理。這點大家都懂的。第二種是用批量更新。
很奇怪這2種方法的處理速度都差不多。都比一條一條的插入塊。那看你高興了。
如果你有更快的方法,請不要忘記了我 lqqlike@163.com.
以下是2中代碼
1.用事物處理
用事物處理去循環比單獨循環要快。別問為什么,因為是事物。
以下是代碼,伸手黨速來。
private void ExcuteListSQL(string tableName, List<List<SqlCondition>> conditionList) { string[] columns = conditionList[0].Select(t => t.ColumnName).ToList().ToArray(); string insertSql = DB.GetInsertSQL(tableName, columns); insertSql = insertSql.Replace("?", "@"); using (OleDbTransaction trans = conn.BeginTransaction()) { OleDbCommand cmd = new OleDbCommand(); cmd.Connection = conn; cmd.Transaction = trans; try { foreach (var one in conditionList) { cmd.CommandText = insertSql; one.ForEach(t => { cmd.Parameters.Add(new OleDbParameter("@" + t.ColumnName, t.Value)); }); cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); } trans.Commit(); } catch (Exception ex) { trans.Rollback(); throw ex; } } } public class SqlCondition { public string ColumnName { get; set; } public object Value { get; set; } }
2.用OleDbDataAdapter.Update 批量更新
以下是代碼
public void ExcuteTableSql(string tableName, DataTable dt) { List<string> columnList = new List<string>(); foreach (DataColumn one in dt.Columns) { columnList.Add(one.ColumnName); } OleDbDataAdapter adapter = new OleDbDataAdapter(); adapter.SelectCommand = new OleDbCommand("select * from " + tableName, conn); using (OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter)) { adapter.InsertCommand = builder.GetInsertCommand(); foreach (string one in columnList) { adapter.InsertCommand.Parameters.Add(new OleDbParameter(one, dt.Columns[one].DataType)); } adapter.Update(dt); } }
代碼下載地址:http://download.csdn.net/detail/lqqlike/9371349