C#造福大家
不管什么数据,只要沾上大数据,效率,快速,批量 都是一件很让人头疼的事情。
尤其是遇到了Access这种数据库。
这个没有什么好的办法,只好一条一条的写SQL插入了。
在这提供2种思路。第一种是写事物去处理。这点大家都懂的。第二种是用批量更新。
很奇怪这2种方法的处理速度都差不多。都比一条一条的插入块。那看你高兴了。
如果你有更快的方法,请不要忘记了我 [email protected]
以下是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
时间: 2024-08-25 15:37:16