|
|
#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 Подскажите пожалуйста в чем причина и как устранить ошибку. |
|
|
|
|
#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. |
|
|
|
|
#3 |
|
Участник
|
я понял, спасибо.
|
|
|
|
|
#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));
}
} |
|
|
|
|
#5 |
|
Administrator
|
+ в карму за желание поделиться найденным решением
|
|
|