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 ...
随机推荐
- LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
连接器LNK是通过调用cvtres.exe完成文件向coff格式的转换的,所以出现这种错误的原因就是cvtres.exe出现了问题. 在电脑里面搜索一下cvtres.exe,发现存在多个文件,使用最新 ...
- 基于mini2440的Qt移植
花了很长时间,终于把Qt移植到mini2440开发板上了,不能说完全成功,总算是完成一大步,各中过程心酸,废话不多说,下面正式讲解移植过程. 移植环境: win7系统,虚拟机是ubuntu12.04 ...
- 关于C#的委托(delegate)的自我理解
首先描述一个事情,一个老师饿了,他要去买东西填饱肚子,然后他发现他的学生“小李”在玩,没学习,于是就委托“小李”去帮他买吃的. 根据这件事我们来分析: 首先得有个老师(老师饿了是他的方法,老师买东西也 ...
- ASP.NET 表单验证实现浅析
首先,自然是配置 Web.config,在 <system.web> 下设定: <authentication mode="Forms"> <form ...
- Delphi JCL JEDI使用 jclDebug
开源 https://github.com/project-jedi/jcl jclDebug 下载jcl,还要下载https://github.com/project-jedi/jedi里的2个in ...
- Python-any函数和all函数
any函数: any(x),只要x中有一个不为空,0,false就返回True,否则返回False all(x)函数 必须x中的所有元素均不为空,0,false才会返回True,否则返回False & ...
- thinkPHP--SQL查询
一.查询方式 ThinkPHP 提供了三种基本的查询方式:字符串条件查询.索引数组条件查询和对象条件查询. 在大多数情况下,推荐使用索引数组和对象方式作为查询条件,因为会更加安全 1.使用字符串作为条 ...
- Web前端安全问题
1.XXS跨站脚本攻击(Cross Site Scripting) 1)通过<script> 举个例子:通过QQ群,或者通过群发垃圾邮件,来让其他人点击这个地址: book.com/sea ...
- Web API的Log问题
建立了一个Web API项目,在WebApiConfig.cs中已经启用了Tracing. config.EnableSystemDiagnosticsTracing(); 同时web.config中 ...
- CSS属性(根据继承性分为两类)
一.可继承属性 1>所有标签可继承: visibility:行高 cursor: 2>内联标签可继承: line-height:行高 color:文字颜色 font-family:文字字体 ...