C#關於Access大數據量的導入


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

 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM