Показать сообщение отдельно
Старый 16.07.2010, 11:08   #1  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
? Connection к другому SQL Server
Имеется 2 SQL Server'a DEV и M01. На DEV живет БД аксапты, на M01 есть табличка откуда надо дернуть данные.

Есть код
X++:
server static anytype testConnection()
{
    anytype     _ret;

    Connection  con = new Connection();
    Statement   stmt = con.createStatement();
    ResultSet   resultSet;
    str         sqlExpression = "SELECT * FROM OPENROWSET('SQLNCLI10', 'Server=" + strLRTrim(CustParameters::find().Server)
                + ";Trusted_Connection=yes;', 'select TOP 1 * from  "+  strLRTrim(CustParameters::find().DB)
                + ".dbo." + strLRTrim(CustParameters::find().Table) + "');"
    ;

    new SqlStatementExecutePermission(sqlExpression).assert();
    resultSet = stmt.executeQuery(sqlExpression);

    try
    {
        resultSet.next();
        _ret = resultSet.getString(1);
    }
    catch (Exception::Error)
    {
        _ret = false;
    }

    CodeAccessPermission::revertAssert();
    return _ret;
}
Вы дает ошибку:
Невозможно выбрать запись в (). База данных SQL обнаружила ошибку.
Описание ошибки SQL: [Microsoft][SQL Native Client][SQL Server]Named Pipes Provider: Could not open a connection to SQL Server [5].
Оператор SQL: SELECT * FROM OPENROWSET('SQLNCLI10', 'Server=M01;Trusted_Connection=yes;', 'select TOP 1 * from TEST.dbo.Table');


Забавно то, что если в самой SQL Server Management Studio запустить
Код:
SELECT * FROM OPENROWSET('SQLNCLI10', 'Server=M01;Trusted_Connection=yes;', 'select TOP 1 * from  TEST.dbo.Table');
То все отрабатывает нормально.

В чем может быть проблема, почему данный запрос не работает из-под Аксапты?

P.S. Логин, под которым стартует АОS аксапты имеет доступ к SQL Server M01. Под ним, выше приведенный запрос, тоже удачно тестировался в SQL Server Management Studio.

Способ с использованием linkedserver, почему то отрабатывает только в SQL Server Management Studio на DEV. Тест соединения проходит удачно.
Linkedserver настроен "Be made using the login's current security contex"

Когда я пробую выполнить запрос, в SQL Server Management Studio на своем компе, с использованием linkedserver, то валятся с ошибки:
Поставщик OLE DB "SQLNCLI10" для связанного сервера "M01" вернул сообщение "Login timeout expired".
Поставщик OLE DB "SQLNCLI10" для связанного сервера "M01" вернул сообщение "A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.".


M01: Microsoft SQL Server 2005 - 9.00.3054.00 (Intel X86) Mar 23 2007 16:28:52 Copyright (c) 1988-2005 Microsoft Corporation Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

DEV: Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (Intel X86) Apr 2 2010 15:53:02 Copyright (c) Microsoft Corporation Enterprise Edition on Windows NT 5.2 <X86> (Build 3790: Service Pack 2) (Hypervisor)
__________________

This posting is provided "AS IS" with no warranties, and confers no rights.