【问题标题】:'Link Table Manager' functionality Programatically using c#“链接表管理器”功能以编程方式使用 c#
【发布时间】:2020-11-26 10:38:39
【问题描述】:

我想编写一些自定义代码以编程方式执行“链接表管理器”操作。我有 MS-Access 数据库,它目前正在从 Excel、MS-Access 和 SQL 服务器引用外部数据。

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

我在 MS-Access 数据库中有一个表,它链接到外部 SQL 数据源(测试数据库)。现在我希望它链接到生产数据库。我尝试了以下代码,但它抛出了一个 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();
    }

【问题讨论】:

    标签: c# sql-server ms-access dao


    【解决方案1】:

    FileDSN 显然是无效的。 FileDSN 应该指向一个 .dsn 文件。如果要使用普通的 DSN,请使用 DSN=,而不是 FileDSN=。由于存在无效的 DSN,因此无法重新链接。

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

    【讨论】:

    • 嗨@Erik你能提供SQL连接字符串和Excel连接字符串的格式吗?会很有帮助!
    • 只需检查connectionstrings.com。确保在它们前面加上 ODBC; 以使它们与 DAO 一起使用。
    • 我尝试使用 ODBC 驱动程序 13 的链接,但得到一个询问凭据和服务器 SPN 的弹出窗口。这里是链接“ODBC;Driver={ODBC Driver 13 for SQL Server}; Server ="+ serverName + "; DATABASE="+sqlDatabase+" Trusted_Connection = Yes;";
    • 好吧,在指定数据库后你需要一个; 分号,这就是为什么它不处理之后发生的事情并且不使用受信任的连接。
    • 然后分享新字符串。此外,废弃Trusted_Connection = Yes 中的空格,除了驱动程序名称和数据库名称之外,您几乎希望 ODBC 连接字符串中包含 0 个空格。
    猜你喜欢
    • 2013-06-14
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    • 2010-10-02
    相关资源
    最近更新 更多