16.07.2010, 11:08 | #1 |
Модератор
|
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. |
|
16.07.2010, 13:11 | #2 |
Модератор
|
У Вас чисто академический интерес - подключиться максимально сложным и запутанным способом (Linked server + OPENROWSET)? ODBCConnection Вас чем не устроил?
__________________
-ТСЯ или -ТЬСЯ ? |
|
16.07.2010, 13:21 | #3 |
Модератор
|
Например ODBCConnection ?
Вопрос закрыт. Найдено решение через X++: System.Data.SqlClient.SqlConnection sqlConnection;
__________________
This posting is provided "AS IS" with no warranties, and confers no rights. |
|
18.10.2010, 18:13 | #4 |
Участник
|
Поигрался с этой штукой и появились у меня два вопроса:
1. После нескольких коннектов к базе с помощью System.Data.SqlClient.SqlConnection зашёл в SQL Management Studio в Activity Monitor и обнаружил несколько висящих процессов от приложения .NET SqlClient Data Provider. Они потом сами удаляются или их надо как-то явно финализировать в программном коде ? 2. Можно ли как-то вытащить данные из полей с типом Container ? Чтобы можно было выбирать данные из другой копии аксаптовской базы. В самой базе такие поля имеют тип Image. Не получилось у меня привести то что возвращает SQLDataReader для таких полей к типу Container .
__________________
Дмитрий |
|
18.10.2010, 19:28 | #5 |
Участник
|
Контейнеры можно перевести из BLOB. Есть специальные функции.Недавно поднимал эту тему.
Container, bin data, Binary, base64 |
|
|
За это сообщение автора поблагодарили: Damn (2). |
19.10.2010, 10:49 | #6 |
Участник
|
То, что возвращает метод SqlDataReader.get_Item() для полей с типом Container, это не Blob. Как я понял, это нечто имеющее тип System.Array. Вопрос в том как его привести к типу Container.
__________________
Дмитрий |
|
Теги |
connection string, odbc, sql server, подключение |
|
|