码迷,mamicode.com
首页 > 数据库 > 详细

C#关于Access大数据量的导入

时间:2015-12-22 00:57:43      阅读:377      评论:0      收藏:0      [点我收藏+]

标签:

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

 
 
 

C#关于Access大数据量的导入

标签:

原文地址:http://www.cnblogs.com/lqqlike/p/5065250.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!