![]() |
#1 |
Модератор
|
![]()
Сбой запроса на разрешение типа "SqlStatementExecutePermission".
Сбой запроса на разрешение типа "SqlStatementExecutePermission". (S)\Classes\SqlStatementExecutePermission\demand (S)\Classes\Statement\executeQuery Каких прав доступа не хватает? Вызываю метод класса на стороне сервера: X++: server static SET pGet_Items() { Connection con = new Connection(); Statement stmt = con.createStatement(); ResultSet resultSet; set s1 = new set (types::Container); ; new SqlStatementExecutePermission(sqlExpression).assert(); sqlExpression = Strfmt("exec [pGet_Items_CLEAR] '%1'", InventParameters::find().it_SQLDB); resultSet = stmt.executeQuery(sqlExpression); CodeAccessPermission::revertAssert(); return s1; } Процедуру элементарную вызывает Код: ALTER PROCEDURE [dbo].[pGet_Items_CLEAR] @DB varchar(20) AS BEGIN SET NOCOUNT ON; DECLARE @TableName varchar(50) SET @TableName = '.dbo.Items'; EXEC ('TRUNCATE TABLE ' + @DB + @TableName) Select 0 as [tmp]; END Вызов другой процедуры проходит нормально, которая возвращает строки. Но в той процедуре тоже есть строка EXEC ('TRUNCATE TABLE ' + @DB + @TableName), но она почему то не отрабатывает при вызове процедуры из аксапты. Таблица так и остается полной. Собственно запрос в SQL Profiler: Код: declare @p1 int set @p1=0 declare @p3 int set @p3=2 declare @p4 int set @p4=8193 declare @p5 int set @p5=0 exec sp_cursoropen @p1 output,N'exec pGet_Items ''Test''',@p3 output,@p4 output,@p5 output select @p1, @p3, @p4, @p5 Не пойму почему с вызовом хранимой процедуры из аксапты такая проблема. |
|
![]() |
#2 |
Administrator
|
Я как-то давно сталкивался с проблемой в том, что несмотря на то, что хранимая процедура как бы возвращает значение - она реально его не возвращает (дело было еще в аксессе, но это фича общая).
Т.е. ошибка не в разрешении самом, а в использовании метода executeQuery() вместо executeUpdate(). Для решения проблемы нужно сделать одно из двух действий: а) Заменить вызов executeQuery() на executeUpdate() и отказаться от анализа результатов отработки процедуры (от resultSet) б) Заменить процедуру функцией, которая возвращает таблицу. В этом случае нужно вместо exec procedure() писать select * from function()
__________________
Возможно сделать все. Вопрос времени |
|
|
За это сообщение автора поблагодарили: Poleax (5). |
![]() |
#3 |
Модератор
|
Цитата:
Сообщение от sukhanchik
![]() Я как-то давно сталкивался с проблемой в том, что несмотря на то, что хранимая процедура как бы возвращает значение - она реально его не возвращает (дело было еще в аксессе, но это фича общая).
Т.е. ошибка не в разрешении самом, а в использовании метода executeQuery() вместо executeUpdate(). Для решения проблемы нужно сделать одно из двух действий: а) Заменить вызов executeQuery() на executeUpdate() и отказаться от анализа результатов отработки процедуры (от resultSet) б) Заменить процедуру функцией, которая возвращает таблицу. В этом случае нужно вместо exec procedure() писать select * from function() Цитата:
Пользовательская функция не может выполнять действия, изменяющие состояние базы данных.
Последний раз редактировалось Poleax; 11.05.2010 в 12:10. |
|
![]() |
#4 |
Модератор
|
Вопрос закрыт.
X++: sqlExpression = Strfmt("TRUNCATE TABLE %1.dbo.Items", InventParameters::find().SQLDB); new SqlStatementExecutePermission(sqlExpression).assert(); stmt.executeUpdate(sqlExpression); CodeAccessPermission::revertAssert(); Dynamics Ax 'SqlStatementExecutePermission' failed Поиск SqlStatementExecutePermission по форуму Последний раз редактировалось Poleax; 02.03.2011 в 19:15. |
|
![]() |
#5 |
Administrator
|
Мдя.... как-то не задумался о том, что не все можно из функции вызвать...
А тогда такой вопрос (он конечно может и не в тему) - а спасет вызов X++: new SqlDataDictionary().tableTruncate(tablenum(InventParameters)) PS Упс... опоздал ![]()
__________________
Возможно сделать все. Вопрос времени |
|
|
|