1.创建 Access 数据库,并关闭其连接
Access 操作的两个引用:
1) Microsoft ActiveX Data Objects 2.8 Library
2) Microsoft ADO Ext. 2.8 for DDL and Security
2.由 DataTable 创建数据库表
注:少数列类型与Access字段类型无法对应,需要单独创建对应关系。
3.DataTable的字符类型“ID数字”字段排序
4.检查Access数据库中指定表是否存在
检查“表1”是否存在的语句:
SELECT Count(*) FROM MSysObjects WHERE (((MSysObjects.Name) Like '表1'));
返回值为1 -- 存在,返回0 -- 不存在。
5.Access数据库间的数据复制
查询语句示例:
- select * form 表名 in 'd:/test.mdb';
- select * from [;Database=d:/test.mdb].表名;
-
SELECT * INTO 新表 FROM 表名 IN 'd:/test.mdb' WHERE id='100'; 如新表存在,则会删除之后新建
6.数字字符串字段匹配查询
示例:查找以 001 开头全为数字的记录
SELCET * FROM 表名 WHERE 字段名 Like '00[1,2,5,6]*' And 字段名 Not Like '*[!0-9]*'
7.大数据量处理的 ContextSwitchDeadlock 异常
问题:
把大约16.6w的记录写入DataTable然后提取信息写入新的数据库时,程序中断,出现 “检测到 ContextSwitchDeadlock”的提示,详细信息如下:
Message: CLR 无法从 COM 上下文 0x1a1a48 转换为 COM 上下文 0x1a1bb8,这种状态已持续 60 秒。拥有目标上下文/单元的线程很有可能执行的是非泵式等待或者在不发送 Windows 消息的情况下处理一个运行时间非常长的操作。这种情况通常会影响到性能,甚至可能导致应用程序不响应或者使用的内存随时间不断累积。要避免此问题,所有单线程单元(STA)线程都应使用泵式等待基元(如 CoWaitForMultipleHandles),并在运行时间很长的操作过程中定期发送消息。
解决方法:
①把代码放到线程中执行,异常消失。(原理不明)
②如果出现这个提示,点击在调试菜单中的异常选项,在Managed Debugging Assistants 中将ContextSwitchDeadlock后面的第一个勾给去掉就可以了。(参考:http://blog.csdn.net/zhongzhengfeng/archive/2009/01/08/3732681.aspx)