Функциональность Link Table Manager Программно с использованием c# - PullRequest
0 голосов
/ 06 августа 2020

Я хочу написать некоторый собственный код для программного выполнения операции «Диспетчер таблиц ссылок». У меня есть база данных MS-Access, которая в настоящее время ссылается на внешние данные из Excel, MS-Access и SQL сервера.

Перед выполнением макроса в моей базе данных MS-Access я хочу повторно связать внешние данные sources или укажите новое местоположение источника данных в случае изменения местоположения источника данных.

У меня есть таблица в базе данных MS-Access, которая связана с внешним SQL источником данных ( Тестовая база данных). Теперь я хочу, чтобы он был связан с производственной базой данных. Я пробовал следующий код, но он выдает исключение COM с описанием ошибки как «ODB C - не удалось подключиться к« EmployeeConnectionFor SQL ».

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();
    }

1 Ответ

1 голос
/ 06 августа 2020

Это FileDSN явно недействительно. FileDSN должен указывать на файл .dsn. Если вы хотите использовать обычный DSN, используйте DSN=, а не FileDSN=. Поскольку существует недопустимый DSN, вы не можете повторно установить связь.

Я настоятельно рекомендую вам go DSNless и просто используйте строку подключения, но предоставление действительного FileDSN тоже должно работать.

...