我试图通过以下代码访问外部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();
}
访问数据有四个代码行:
//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
如您所见,只有一行不会引发错误,因为字段的数据类型适合所需的操作。信息记录只是一个例子。如果我尝试将数据分配给ax-table-fields,则会出现同样的问题。
通过int2str()
,any2str()
等进行投射也无效。
那么处理数据读取的正确方法是什么?进一步处理?
@edit: ErrorMsg
FehlerwährendderVerarbeitung:ElementtypfürVertitynzuweisungungültig。
答案 0 :(得分:1)
我刚尝试在SSMS中直接运行你的查询,发现在sql server上的实际表中没有字段LEVEL,但是有一个名为“LEVEL_”的字段(这是我表上的第3个字段)
此外,这谈到any2str没有做你期望它做的事情,但我不认为这是你检索LEVEL字段的问题。 http://abraaxapta.blogspot.com/2012/02/kernel-function-madness-any2str.html