Access批量操作
鉴于C#要插5万条记录到Access很慢,在网上找了好久的资料,终于找到了比较有用的信息(转载自Bach)谢谢!
总结如下:
1、导出TXT: select * into [data.txt] in "E:/DATA" "Text;" from TableName
(存放的TXT名)(存放路径) (表名)
注意:这种方式导出的TXT格式与access中的手动导出的格式不一样,会生成一个schema.ini,相当于设置视图里面的数据
2、导入到新表:SELECT * INTO TableName FR0M [data.txt] IN "E:/data" "Text;"
注意:导入到新表需要schema.ini,且TXT格式必须是用1中的语句导出的格式一样
3、表已经存在, 追加导入:INSERT INTO TableName select * from [data.txt] in "E:/data" "Text;"
注意:TXT格式必须是用1中的语句导出的格式一样,可以没有schema.ini
通过以上方法对access的大量数据的操作,速度快,且不卡。
以下是我CAD二次开发时用到上述技术的代码,懒得整理,如有人看不懂,留言我整理一下
DataTable写入txt
private void DatatableToTxt(System.Data.DataTable dt, string txtPath)
{
StringBuilder strB = new StringBuilder(); for(int i=;i<dt.Columns.Count;i++)
{
if(i!=dt.Columns.Count-)
strB.AppendFormat("\"{0}\",",dt.Columns[i].ColumnName);
else
strB.AppendFormat("\"{0}\"", dt.Columns[i].ColumnName);
}
strB.Append("\r\n"); for (int i = ; i < dt.Rows.Count; i++)
{
for (int j = ; j < dt.Columns.Count; j++)
{
if (dt.Columns[j].DataType == typeof(string) && !string.IsNullOrEmpty(dt.Rows[i][j].ToString()))
{
if (j != dt.Columns.Count - )
strB.AppendFormat("\"{0}\",", dt.Rows[i][j].ToString());
else
strB.AppendFormat("\"{0}\"", dt.Rows[i][j].ToString());
}
else
{
if (j != dt.Columns.Count - )
strB.AppendFormat("{0},", dt.Rows[i][j].ToString());
else
strB.AppendFormat("{0}", dt.Rows[i][j].ToString());
}
}
if(i!=dt.Rows.Count-)
strB.Append("\r\n");
}
Write(txtPath, strB.ToString());
}
新建TXT
public void Write(string path,string text)
{
if (File.Exists(path))
File.Delete(path);
FileStream fs = new FileStream(path, FileMode.Create);
StreamWriter sw = new StreamWriter(fs,System.Text.Encoding.Default);
//开始写入
sw.Write(text);
//清空缓冲区
sw.Flush();
//关闭流
sw.Close();
fs.Close();
}
调用
DatatableToTxt(dt_new, @"D:\Data.txt");
string strinsert = "INSERT INTO GX_PS_WSP select * from [Data.txt] in \"D:/\" \"Text;\" ";
ExecuteSql(strinsert, constr);
Access批量操作的更多相关文章
- .net 调用Oracle.Data.Access 组件提供的用于批量操作的方法—获取数据库表结构方法和跟参数赋值方法
1./// <summary> /// 获取当前目标表结构 /// </summary> /// <param name="tableName"> ...
- .net 调用Oracle.Data.Access 组件提供的用于批量操作的方法
1.添加引用 using Oracle.DataAccess.Client; using System.Configuration; 2.代码 增加方法 //DestinationTableName ...
- Excel(Access)文件共享锁定数溢出(Error 3052)的解决方法
Excel或Access均可能会提示:文件共享锁定数溢出(Error 3052),主要版本为office 2003,在其他版本上未遇到.错误提示如下: Microsoft JET Database E ...
- 【基于WinForm+Access局域网共享数据库的项目总结】之篇一:WinForm开发总体概述与技术实现
篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...
- windows 部署 git 服务器报 Please make sure you have the correct access rights and the repository exists.错误
这两天在阿里云上弄windows 服务器,顺便部署了一个git服务.根据网上教程一步步操作下来,最后在 remote远程仓库的时候提示 fatal: 'yourpath/test.git' does ...
- 【.net 深呼吸】连接Access数据库应注意的几点
本地数据库可以有Y种选择,比如Sqlite.SQL Server Express.SQL Local DB.SQL Server CE.Access等,本文老周选用比较著名的Access本地数据库,在 ...
- ASP.NET OAuth:解决refresh token无法刷新access token的问题
最近同事用iOS App调用Open API时遇到一个问题:在access token过期后,用refresh token刷新access token时,服务器响应"invalid_gran ...
- ASP.NET OAuth:access token的加密解密,client secret与refresh token的生成
在 ASP.NET OWIN OAuth(Microsoft.Owin.Security.OAuth)中,access token 的默认加密方法是: 1) System.Security.Crypt ...
- Web API与OAuth:既生access token,何生refresh token
在前一篇博文中,我们基于 ASP.NET Web API 与 OWIN OAuth 以 Resource Owner Password Credentials Grant 的授权方式( grant_t ...
随机推荐
- modelsim(3) - tips(zt)
1)如果需要跟踪信号,可以使用dataflow,直观,缺点是后仿太慢! http://www.cnblogs.com/asus119/archive/2011/04/01/2002525.html M ...
- MC的内存管理和删除机制
先看一下,什么叫做内存的碎片化: 如果用c语言直接 malloc,free 来向操作系统申请和释放内存时, 在不断的申请和释放过程中,形成了一些很小的内存片断,无法再利用. 这种空闲,但无法利用内存的 ...
- TestLink安装及整合Jira
TestLink安装及整合Jira 1.Testlink 安装部署 Testlink是一个开源的测试管理工具,主要用于管理测试用例,从测试需求.测试计划.测试用例管理和用例执行,到最后的结果分析,一套 ...
- percona-toolkit工具包的安装和使用
1.安装与Perl相关的模块 PT工具是使用Perl语言编写和执行的,所以需要系统中有Perl环境 # yum install -y perl perl-devel perl-Time-HiRes p ...
- prolog 阶段总结
http://blog.csdn.net/mwsong/article/details/1766382 到现在为止,我们已经对Prolog有了一个基本的了解,现在有必要对我们所学过的知识做一个系统 ...
- string.Join()的用法
List<string> list = new List<string>(); list.Add("I"); list.Add("Love&quo ...
- Excel 读写程序 C#源代码下载
http://u.163.com/lNaJAjOz 提取码: E4ZHjnfD
- show status和show variables区别解析
1.show status 查看系统运行的实时状态,便于dba查看mysql当前运行的状态,做出相应优化,动态的,不可认为修改,只能系统自动update. MariaDB [(none)]> ...
- ROS下创建第一个节点工程
1.创建工作区 mkdir catkin_ws cd catkin_ws mkdir src 2.在src目录下创建包Myrobot,后面所跟roscpp rospy为依赖包 catkin_creat ...
- html初学者笔记01
一.Html简介 HTML 是一种标记语言 忽略大小写,语法宽松 使用 HTML 标记和元素,可以: 控制页面和内容的外观 发布联机文档 使用 HTML 文档中插入的链接检索联机信息 创建联机表单,收 ...