'Link Table Manager' 功能以编程方式使用 c#

'Link Table Manager' functionality Programatically using c#

我想编写一些自定义代码以编程方式执行 'Link Table Manager' 操作。我有 MS-Access 数据库,该数据库当前引用来自 Excel、MS-Access 和 SQL 服务器的外部数据。

在我的 MS-Access 数据库上执行宏之前,我想重新link 外部数据源或提供数据源的新位置以防数据位置发生变化来源。

我在 MS-Access 数据库中有一个 table,它链接到外部 SQL 数据源(测试数据库)。现在我希望将其 linked 到生产数据库。我尝试了以下代码,但它抛出了一个 COM 异常,错误描述为“ODBC--与 'EmployeeConnectionForSQL' 的连接失败。”

public void performLinkTableMangerOperationForSQL()
        {  
            string CurrentDatabasePath = @"D:\UDTDatabase\InternalDatabase.accdb";          

            Microsoft.Office.Interop.Access.Dao.DBEngine DAO = new Microsoft.Office.Interop.Access.Dao.DBEngine();
            Microsoft.Office.Interop.Access.Dao.Database db;
            Microsoft.Office.Interop.Access.Dao.TableDefs dt;
            db = DAO.OpenDatabase(CurrentDatabasePath);
            dt = db.TableDefs;

            // Refreshing link for Sql server external table with DSN.
            string sqlSource = @"DATABASE=Employee;";
            string DSNName = "EmployeeConnectionForSQL;";           
            string sqlNewConnectionString = @"ODBC;FileDSN=" + DSNName + sqlSource;

            foreach (Microsoft.Office.Interop.Access.Dao.TableDef table in dt)
            {
                string name = table.Name;
                if (table.Name == "dbo_Employees")
                {
                    table.Connect = sqlNewConnectionString;
                    table.RefreshLink();
                }
            }
         db.Close();
    }

那个FileDSN显然是无效的。 FileDSN 应指向 .dsn 文件。如果您想使用普通 DSN,请使用 DSN=,而不是 FileDSN=。由于 DSN 无效,您无法重新链接。

我强烈建议您使用无 DSN,只使用连接字符串,但提供有效的 FileDSN 也应该有效。