You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 11:50:19