Показать сообщение отдельно
Старый 01.04.2009, 11:26   #13  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,715 / 1204 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Насчет удобства работы через ADO - вопрос спорный. Лично мне кажется, что простые команды вроде Select, Update, Insert, Delete проще передавать все-таки через ODBC.

Вариантов подключения через ODBC несколько:

1. Если внешний сервер подключен как Linked-сервер (в случае MS SQL), то просто создаешь объект Connection и немного меняешь адресацию к серверу.

SELECT .. FROM LinkedServer.BaseName.owner.Table

Т.е. вместо имени таблицы имя из 4 "колен". Причем, как правило, владельца вообще опускают и пишут 2 точки подряд.

2. Если внешний сервер это совершенно не зависимый сервер, то вместо объекта Connection используют ODBCConnection. А в остальном все то же самое.

Это выглядит примерно так:

X++:
    OdbcConnection  connectBase;
    Statement statment;
    ResultSet resultSet;
    LoginProperty   lp = new LoginProperty();
    str             strConnectionString;
    Name _server = "MyServer";
    Name _dataBase = "MyBase";
    ;

/*
    // Можно и в одну строку задать все параметры
    strConnectionString = strFmt("DRIVER=SQL Server;SERVER=%1;DataBase=%2;Trusted_Connection=Yes",_server,_dataBase);
    lp.setOther(strConnectionString);
*/
    // Но для определенности задаю те параметры, которые возможно, явным образом
    lp.setDatabase(_dataBase);
    lp.setServer(_server);
    // Фигурные скобки не обязательны
    lp.setOther("DRIVER={SQL Server};Trusted_Connection=Yes");

    connectBase = new OdbcConnection(LP);

/*
Для объекта Connection формировать LoginProperty нет необходимости.
В этом случае все ограничивается строкой

Connection connectBase;

connectBase = new Connection();

но это подключение именно к текущему серверу
*/


// Далее работа с настроенным ODBC-соединением
    statment = connectBase.createStatement();

    // Обновление
    statment.executeUpdate("UPDATE someTable SET someTable.someField = '321' WHERE someField2 = '123'")

    // Чтение
    resultSet = statment.executeQuery("select * from someTable")
    while (resultSet.next())
    {
        info(resultSet.getString(1));
    }
За это сообщение автора поблагодарили: tolstjak (1).