C#实现Access跨库表复制报错及SQL语句有效性咨询
问题分析与解决方案
1. 解决"找不到backup.mdb"的错误
你遇到的错误核心是代码中错误引用了.mdb文件而非实际的.accdb文件,或路径处理逻辑出错:
- 连接字符串或SQL语句里误将
.accdb写成.mdb - 未使用绝对路径,程序默认在根目录查找不存在的
backup.mdb
修正要点
确保所有涉及源数据库的位置都使用完整绝对路径和正确文件名:
string sourceDbPath = @"D:\backup.accdb"; // 用@符号避免路径转义问题 string targetDbPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "CheckDatabase.accdb");
2. 跨库INSERT SELECT语句有效性验证
Access支持跨库复制表操作,需通过IN子句指定外部数据库路径,注意路径转义规则。
正确SQL语句格式
若从目标数据库连接执行,语句结构如下(表名check是保留字,需用方括号包裹):
INSERT INTO [check] SELECT * FROM [check] IN 'D:\backup.accdb'
C#完整实现示例
using System.Data.OleDb; using System.IO; using System; class Program { static void Main() { string sourceDbPath = @"D:\backup.accdb"; string targetDbPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "CheckDatabase.accdb"); string connString = $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={targetDbPath};"; string sql = $"INSERT INTO [check] SELECT * FROM [check] IN '{sourceDbPath}'"; using (OleDbConnection conn = new OleDbConnection(connString)) { conn.Open(); using (OleDbCommand cmd = new OleDbCommand(sql, conn)) { try { int rows = cmd.ExecuteNonQuery(); Console.WriteLine($"成功复制{rows}条记录"); } catch (OleDbException ex) { Console.WriteLine($"错误信息:{ex.Message}"); } } } } }
额外注意事项
- 确保两个数据库的
[check]表结构完全一致,否则会抛出字段不匹配错误 - 目标数据库
CheckDatabase.accdb必须预先存在,若需动态创建需额外编写建库逻辑 - 保证程序对源数据库(D:\backup.accdb)有读取权限,对目标数据库有写入权限
内容的提问来源于stack exchange,提问作者Ehsan Nabavi
相关产品推荐
相关产品推荐

