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

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

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

Access数据库大数据量的相关测试分析

[e良师益友网]在使用Access 数据库无须开专门的数据库空间,调用,迁移也方便,节省费用.另外对网站搭建者的专业能力要求也相对低一些.但随着网站的运行,数据库体积越来越大,数据 量也从最初的几百条到了现在的上万条,上十万条甚至更多.于是因数据应用级别的改变带来的各种各样的应用问题出现了.而其中大数据量的列表分页效率问题更 是让很多人头疼.小编我随便通过“大数据量分页效率”,“access 分页”等关键词分别百度一下,发现有此疑问的大有人在.很多网页上也给出了不同的解决办法.那么,这些方法到底

使用OPENROWSET、Microsoft.ACE.OLEDB实现大数据量的高效导入

首先说明使用的环境是:java和Sqlserver. 最近公司需要进行大数据量的导入操作.原来使用的是Apache POI,虽然可以实现功能,但是因为逻辑处理中需要进行许多校验,处理速度太慢,使用多线程之后也不尽如人意.在网上搜索之后,找到了OPENROWSET和OPENDATASOURCE,发现使用OPENROWSET,可以非常快速的把Excel导入到数据库中.之后的各种校验,我可以通过编写sql来实现.最终结果是6w条数据可以在10秒内完成.当然数据量增加之后,完成时间并不会明显增加.这需要

MYSQL数据库导入大数据量sql文件失败的解决方案

1.在讨论这个问题之前首先介绍一下什么是"大数据量sql文件". 导出sql文件.选择数据库-----右击选择"转储SQL文件"-----选择"结构和数据"  .保存文件db_mras.sql文件. 2.导入sql文件.在MYSQL中新建数据库db_mras.选择数据库-----右击选择"运行SQL文件"-----选择文件db_mras.sql,运行. 现在发现运行失败,提示错误"MySQL server has g

采用Kettle分页处理大数据量抽取任务

作者:Grey 原文地址: http://www.cnblogs.com/greyzeng/p/5524614.html 需求: 将Oracle数据库中某张表历史数据导入MySQL的一张表里面. 源表(Oracle):table1 目标表(MySQL):table2 数据量:20,000,000 思路: 由于服务器内存资源有限,所以,无法使用Kettle一次性从源表导入目标表千万级别的数据,考虑采用分页导入的方式来进行数据传输,即: 根据实际情况设置一个每次处理的数据量,比如:5,000条,然后

【MySQL】MySQL中针对大数据量常用技术_创建索引+缓存配置+分库分表+子查询优化(转载)

原文地址:http://blog.csdn.net/zwan0518/article/details/11972853 目录(?)[-] 一查询优化 1创建索引 2缓存的配置 3slow_query_log分析 4分库分表 5子查询优化 二数据转移 21插入数据 如今随着互联网的发展,数据的量级也是撑指数的增长,从GB到TB到PB.对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求.这个时候NoSQL的出现暂时解决了这一危机.它通过降低数据的安全性,减少对事务

大数据量下高并发同步的讲解(转)

文章转自:http://blog.csdn.net/xcw931924821/article/details/52475742 *************************************************************************************************************************************************************************************** 对于

Sql server 大数据量插入速度慢或丢失数据解决办法

问题描述:我的设备每秒2000条数据插入数据库,2个设备总共4000条,当在程序里面直接用insert语句插入时,两个设备同时插入大概总共能插入约2800条左右,数据丢失约1200条左右,找了好多解决方法,整理了两种效果比较明显的解决办法: 第一种:使用Sql Server函数: 1.将数据组合成字串,使用函数将数据插入内存表,后将内存表数据复制到要插入的表. 2.组合成的字符换格式:'111|222|333|456,7894,7458|0|1|2014-01-01 12:15:16;1111|

MySQL数据库如何解决大数据量存储问题

利用MySQL数据库如何解决大数据量存储问题? 各位高手您们好,我最近接手公司里一个比较棘手的问题,关于如何利用MySQL存储大数据量的问题,主要是数据库中的两张历史数据表,一张模拟量历史数据和一张开关量历史数据表,这两张表字段设计的很简单(OrderNo,Value,DataTime).基本上每张表每天可以增加几千万条数据,我想问如何存储数据才能不影响检索速度呢?需不需要换oracle数据库呢?因为我是数据库方面的新手,希望可以说的详细一点,万分感谢!!?-0-#暂时可以先考虑用infobri

大数据量下高并发同步的讲解(不看,保证你后悔)

对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发访问问题了.而并发问题是绝大部分的程序员头疼的问题, 但话又说回来了,既然逃避不掉,那我们就坦然面对吧~今天就让我们一起来研究一下常见的并发和同步吧. 为了更好的理解并发和同步,我们需要先明白两个重要的概念:同步和异步    1.同步和异步的区别和联系          所谓同步,可以理解为在执行完一个函数或方法之后,一直等待系统返回值或消息,这时程序是出于阻塞的,只有接收到 返回的值或消息后才往下执行其它的命令. 异步