Программно настроить SQL клиент на подключение по TCP/IP
От: aceproof  
Дата: 09.08.07 12:44
Оценка:
Бодрого всем времени суток.
Проблема следующая. Есть SQL сервер 2000. Есть клиентские машины, на которых работает ПО, которое подключается к этому SQL серверу. На некоторых клиентских машинах с некоторыми операционными системами (как правило Win2K) ПО не может подключиться к серверу ("Server not exists or access denied" и т.п.). Лечили это тем, что в источниках данных ODBC создавали новый источник SQL, который настраивался на работу по TCP/IP (а не по именованным каналам, как в таких случаях предлагалось по умолчанию).
Ситуация усложняется тем, что с одной клиентской машины может осуществляется соединение с несколькими SQL серверами. В большинстве случаев создание единственного источника ODBC для единственного IP сервера помогала осуществить соединение и ко всем остальным серверам, но встречались некоторые экземпляры систем, где приходилось настравить таким образом источник для каждого сервера индивидуально.

Насколько понимаю, это можно полечить еще и с помощью SQL Server Client Network Utility, но ручками.

Посему вопрос. Возможно ли в коде при подключении указать, что необходимо использовать подключение по TCP/IP, или настроить SQL клиента программно.

Вот кусок кода, который используется для подключения к SQL серверу:
void CDBConnection::OpenDataSource(LPCTSTR server, LPCTSTR database, LPCTSTR login, LPCTSTR password)
{
    HRESULT        hr;
    CDataSource db;
    CDBPropSet    dbinit(DBPROPSET_DBINIT);
    CString str;

    {
        _bstr_t bstrPwd(password);
        dbinit.AddProperty(DBPROP_AUTH_PASSWORD, (BSTR)bstrPwd);
    }
    
    {
        _bstr_t bstrLogin(login);
        dbinit.AddProperty(DBPROP_AUTH_USERID, (BSTR)bstrLogin);
    }


    if(database)
    {
        _bstr_t dbName(database);
        dbinit.AddProperty(DBPROP_INIT_CATALOG, (BSTR)dbName);
    }


    if(server)
    {
        _bstr_t sqlServer(server);
        dbinit.AddProperty(DBPROP_INIT_DATASOURCE, (BSTR)sqlServer);
    }

    dbinit.AddProperty(DBPROP_INIT_LCID, (long)1049);
    dbinit.AddProperty(DBPROP_INIT_PROMPT, (short)DBPROMPT_NOPROMPT);
    // устанавливает timeout на соединение с БД, в секундах
    dbinit.AddProperty(DBPROP_INIT_TIMEOUT, (long)m_timeOut);
    // устанавливает timeout на выполнение команды, в секундах
    // 0 - timeout отсутствует
    dbinit.AddProperty(DBPROP_COMMANDTIMEOUT, (long)0);

    hr = db.Open( "SQLOLEDB.1", &dbinit);
    if (FAILED(hr))
    {
        str = GetDBErrorRecords(hr);
        throw(str);
    }
    
    hr = m_session.Open(db);
    if(FAILED(hr))
    {
        str = GetDBErrorRecords(hr);
        throw(str);
    }
    ...
}
Re: Программно настроить SQL клиент на подключение по TCP/IP
От: aceproof  
Дата: 13.08.07 05:04
Оценка:
"Дохтур, меня игнорируют!!!"
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.