16.07.2015, 13:23 | #1 |
Участник
|
Доброе время суток, есть класс в методе которого реализовано серверное подключение к SQL БД.
задумка такая чтобы передать на класс запрос , отработка запроса произойдет на стороне сервера, далее результат(CCADORecordSet) возвращаться в вызываемый метод на клиенте. Class MyConnection method CCADORecordSet() Код: public static server CCADORecordSet getRsFromQuery(str query) { str DataSourse, user, passwd, ConnectCatalog; CCADOConnection connection ; CCADOCommand ccADOCommand; CCADORecordSet record; COM _comCN; COM cmd; InteropPermission _InteropPermission = new InteropPermission(InteropKind::ComInterop); ; _InteropPermission.assert(); connection = new CCADOConnection(); DataSourse=XXX.XXX.XXX.XXX; user=sa; passwd=XXXXXX; ConnectCatalog=AX; try { connection.open("Provider=SQLOLEDB ;"+ "Data Source="+DataSourse+" ;" + "Initial Catalog="+ConnectCatalog+" ;" + "uid="+user+" ; Connect Timeout=30000;" + "pwd="+passwd); _comCN = connection.connection(); cmd = new COM("ADODB.Command"); cmd.activeConnection(_comCN); cmd.CommandType(1); ccADOCommand= new CCADOCommand(); ccADOCommand.commandText(query); ccADOCommand.activeConnection(connection); ccADOCommand.commandTimeout(6000); record = ccADOCommand.execute(); return record; } catch { throw error("An Exception has occurred"); } connection.close(); } далее допустим из job вызываем этот метод Код: static void Job8(Args _args) { str query; Table _Table; CCADORecordSet record; COM recordSet; ; query=strfmt("select * from inventjournaltable" ); record = MyConnection::CCADORecordSet(query); recordSet = record.recordSet(); while (!record.EOF()) { _Table.clear(); _Table.JournalID = record.fields().itemName("JournalId").value(); _Table.insert(); recordSet.moveNext(); } recordSet.close(); } Выполняя Job получаю следующую ошибку. Сбой запроса на разрешение типа "InteropPermission". (S)\Classes\InteropPermission\demand (S)\Classes\COM\EOF (S)\Classes\CCADORecordSet\EOF- line 3 (C)\Jobs\Job8 - line 15 Подскажите пожалуйста в чем причина и как устранить ошибку. |
|
24.07.2015, 18:02 | #2 |
Участник
|
Привет, форум все же больше навиженовский.
Подобные вопросы принято задавать на axforum.info Ваша проблема, скорее всего связана с областью действия assert. https://msdn.microsoft.com/en-us/library/bb190039.aspx Цитата:
Declare a variable for the relevant permission class.
Create a new instance of the class. Request permission by using the assert method on the permission class. Revert the assertion (to limit the scope of the permission) after the CAS-enabled API has been used; optional. Permission is automatically reverted when the method finishes executing. |
|
03.08.2015, 09:38 | #3 |
Участник
|
я понял, спасибо.
|
|
13.08.2015, 09:47 | #4 |
Участник
|
Нашел решение, если кому нужно.
Код: //Method :: executeQuery ======================================= server static ResultSet executeQuery(str sql, Connection connection = new Connection()) { SqlStatementExecutePermission sqlPerm; Statement statement; ResultSet resultSet; ; sqlPerm = new SqlStatementExecutePermission(sql); sqlPerm.assert(); statement = connection.createStatement(); resultSet = statement.executeQuery(sql); CodeAccessPermission::revertAssert(); return resultSet; } //Job :: Job_DirectSQLTest ===================================== static void Job_DirectSQLTest(Args _args) { ResultSet testRS; ; testRS = SQLUtility::executeQuery("select top 10 ItemId from InventTable"); while(testRS.next()) { info(testRS.getString(1)); } } |
|
13.08.2015, 09:50 | #5 |
Administrator
|
+ в карму за желание поделиться найденным решением
|
|