Как переписать код автоматизации Office - PullRequest
3 голосов
/ 22 июля 2011

enter image description hereenter image description hereenter image description here VS 2008 / C # / MS 2007

У меня есть функция сохраненного импорта в базе данных Access, которая вызывает ODBC-соединение.Вместо того, чтобы зависеть от встроенной функции сохраненного импорта, я пытаюсь переписать функцию в C #, которая будет вызывать ODBC Connection для импорта данных в базу данных MS Access.

Я не могу вызвать строку подключения, сохраненную в базе данных Access, которая вызывает драйверы ODBC.Я продолжаю терпеть неудачу .. !!

    Access.Application access1 = new Access.Application();
    try
    {

        string sSalisburyAccessDB = Server.MapPath("App_Data/Database1.mdb");
        access1.OpenCurrentDatabase(sSalisburyAccessDB, true, null);

        // Drop the existing table data

        access1.DoCmd.DeleteObject(Access.AcObjectType.acTable, "plans");

        access1.DoCmd.DeleteObject(Access.AcObjectType.acTable, "price");

        // Run the saved import
        access1.DoCmd.RunSavedImportExport("TestODBC");

        // Close the database
        access1.CloseCurrentDatabase();

        // Quit MS Access
        access1.Quit(Access.AcQuitOption.acQuitSaveAll);

        Response.Write("successful");



    }
    catch (Exception ex)
    {
        Response.Write(ex.Message);
    }

enter image description here

1 Ответ

2 голосов
/ 27 июля 2011

Мне кажется, что вы используете автоматизацию в IIS (Server.Mappath ... и Response.Write ...)?

ЕСЛИ это тот случай, тогда это НЕ поддерживается MS - см. http://support.microsoft.com/default.aspx?scid=kb;EN-US;q257757#kb2

Причин несколько: начиная с безопасности и заканчивая тем, что офис никогда не строили для такого сценария использования сервера ...

Я не понимаю, почему вы не простоиспользуя ODBC из C # вместо MS Access?Возможно, вы могли бы показать еще какой-нибудь код surce или сообщение об исключении / ошибке ...?

EDIT - после долгого обсуждения (см. Комментарии):

Если вам нужен доступ к базе данных Faircom, добавьте using System.Data.Odbc; и попробуйте

OdbcConnection DbConnection2Salisbury = new OdbcConnection("DSN=Salisbury;DBQ=S:\;CODEPAGE=1252;");

DbConnection2Salisbury.Open();

После этого вы можете использовать ADO.NET для запросов и т. Д. К базе данных Faircom, например, с OdbcCommand и OdbcDataReader и т. Д.

Для получения дополнительной информации см. http://msdn.microsoft.com/en-us/library/system.data.odbc.aspx
Пример кода см. http://www.easysoft.com/developer/languages/csharp/ado-net-odbc.html

...