C#通过ODBC+Jet4.0复制Access表并保留主键的方法问询
解决方案
- 第一步:读取原表元数据
用C# Odbc连接的GetSchema接口可以直接获取原表的列属性、主键字段信息,无需依赖DAO:
列信息可以通过connection.GetSchema("Columns", new[] { null, null, "原表名" })获取,主键信息可以通过connection.GetSchema("Indexes", new[] { null, null, "原表名" })筛选出PRIMARY_KEY为true的条目即可。 - 第二步:手动创建结构完全匹配的新表
根据读取到的列信息构造CREATE TABLE语句,Jet 4.0支持标准的建表语法,示例:CREATE TABLE new_name ( ID INT NOT NULL, 字段1 VARCHAR(50), 字段2 DATETIME ) - 第三步:为新表添加主键约束
Jet 4.0完全支持ALTER TABLE ADD CONSTRAINT语法添加主键,示例:ALTER TABLE new_name ADD CONSTRAINT PK_new_name PRIMARY KEY (ID) - 第四步:迁移原表数据
不要使用SELECT * INTO,改用插入语句迁移数据:INSERT INTO new_name SELECT * FROM old_name
补充说明
SELECT * INTO语法本身的设计就是仅复制字段数据类型和行数据,不会复制主键、索引、约束、默认值等元数据属性,这是Jet引擎的固有特性,没有调整空间。- 整个流程完全基于ODBC标准接口和Jet 4.0原生支持的SQL语法,不需要引入DAO或者其他额外依赖,符合任务要求。
内容的提问来源于stack exchange,提问作者AlainD
相关产品推荐
相关产品推荐

