SQL Server - OPENROWSET Ошибка имени сервера при использовании параметров

Это сбой, потому что Java_com_myorg_MyJavaClass_createNewMyStruct объявляется как возвращающий «jobject», но на самом деле возвращает struct MyStruct. Если вы запускаете это с включенным CheckJNI, виртуальная машина будет громко жаловаться и прерываться. Функция processData () также будет довольно расстроена из-за того, что она передается в «аргументах».

Рабочий объект - объект на управляемой куче. Он может иметь дополнительный материал до или после объявленных полей, и поля не должны быть выложены в памяти в каком-либо конкретном порядке. Таким образом, вы не можете сопоставить структуру C над классом Java.

Самый простой способ справиться с этим был идентифицирован в более раннем ответе: манипулировать заданием с помощью функций JNI. Выделите объекты с Java или с помощью NewObject, Get / Set полей объекта с соответствующими вызовами.

Существуют различные способы «обманывать» здесь. Например, вы можете включить байт [] в свой Java-объект, который содержит байты sizeof (struct MyStruct), а затем использовать GetByteArrayElements, чтобы получить указатель на него. Немного уродливый, особенно если вы хотите получить доступ к полям со стороны Java.

1
задан marc_s 18 March 2019 в 21:30
поделиться

1 ответ

РЕШЕНИЕ:

DECLARE @SERVERNM sysname;
SET @SERVERNM = 'SERVER='+CAST(CONNECTIONPROPERTY('local_net_address') AS sysname)+'\'+CAST(SERVERPROPERTY('InstanceName') AS sysname)+';Trusted_Connection=yes;'
DECLARE @TEST NVARCHAR(MAX)
SET @TEST = QUOTENAME(@SERVERNM,'''')

DECLARE @SQL nvarchar(MAX);
SET @SQL = N'SELECT *' + NCHAR(13) + NCHAR(10) +
           N'FROM OPENROWSET(''SQLOLEDB'',' + NCHAR(13) + NCHAR(10) +
           N'                ' + @TEST + ',' + NCHAR(13) + NCHAR(10) +
           N'                ''set fmtonly off;exec DW..P750106119 @ENT_NR_VERSAO=1'');'

EXEC sp_executesql @SQL;
0
ответ дан Gabriel Franco 18 March 2019 в 21:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: