次のコードを使用して、外部の SQL テーブルにアクセスしようとしています。アクセスは意図したとおりに機能しますが、さらに処理するためにデータ型をキャストする必要がある場合、値を処理するのに問題があります。
次のコードは、ax でジョブとして実行できます。
static void Job1(Args _args)
{
str serverName;
str catalogName;
str ConnectionString;
str sqlQuery;
System.Data.SqlClient.SqlConnectionStringBuilder connectionStringBuilder;
System.Data.SqlClient.SqlConnection connection;
System.Data.SqlClient.SqlCommand command;
System.Data.SqlClient.SqlParameterCollection parameterCollection;
System.Data.SqlClient.SqlDataReader dataReader;
;
new InteropPermission( InteropKind::ClrInterop ).assert();
sqlQuery = "SELECT TOP 10 * FROM PRODROUTE";
serverName = SysSQLSystemInfo::construct().getLoginServer();
catalogName = SysSQLSystemInfo::construct().getloginDatabase();
connectionStringBuilder = new System.Data.SqlClient.SqlConnectionStringBuilder();
connectionStringBuilder.set_DataSource(serverName);
connectionStringBuilder.set_IntegratedSecurity(true);
connectionStringBuilder.set_InitialCatalog(catalogName);
ConnectionString = connectionStringBuilder.get_ConnectionString();
connection = new System.Data.SqlClient.SqlConnection(ConnectionString);
command = new System.Data.SqlClient.SqlCommand(sqlQuery);
command.set_Connection(connection);
try
{
connection.Open();
try
{
dataReader = command.ExecuteReader();
while(dataReader.Read())
{
//info( dataReader.get_Item( "PRODID" )); // ok
//info( dataReader.get_Item( "LEVEL" )); // not working
info ( int2str( dataReader.GetInt32( 23 ))); // not working
//info( any2str(dataReader.get_Item( "LEVEL" ))); // not working
}
dataReader.Dispose();
}
catch
{
dataReader.Dispose();
}
catch(Exception::CLRError)
{
dataReader.Dispose();
}
connection.Dispose();
}
catch
{
connection.Dispose();
}
catch(Exception::CLRError)
{
connection.Dispose();
}
command.Dispose();
CodeAccessPermission::revertAssert();
}
データにアクセスするための 4 つのコードラインがあります。
//info( dataReader.get_Item( "PRODID" )); // ok
//info( dataReader.get_Item( "LEVEL" )); // not working
info ( int2str( dataReader.GetInt32( 23 ))); // not working
//info( any2str(dataReader.get_Item( "LEVEL" ))); // not working
ご覧のとおり、フィールドのデータ型が目的の操作に適合するため、エラーがスローされないのは 1 行だけです。情報ロギングは単なる例です。ax-table-fields にデータを割り当てようとすると、同じ問題が発生します。などによるキャストも同様に機能しませんint2str()
。any2str()
では、さらに処理するために、読み取ったデータを処理する正しい方法は何ですか?
@編集:エラーメッセージ
Fehler während der Verarbeitung: Elementtyp für Variablenzuweisung ungultig.