我有一个在server2003上运行的生产系统,昨天/今天必须重建它,它与我们的AS400(DB2)通信。系统现在是Windows7x64。它使用ADO对象来实现这一点,连接字符串中的提供者被指定为MSDASQL,它使用系统数据源(dsn)。问题是数值被截断了。下面是简化的测试版本,其输出为注释(完整的脚本是为cast编写的数据字段()。值为float--这没有帮助):
Con = win32com.client.Dispatch("ADODB.Connection")
Con.Open ("Provider=MSDASQL;DSN=AS400", "UserID", "Password")
Data = win32com.client.Dispatch("ADODB.Recordset")
Data.Open("SelectStatement", Con, 2, 3, 1)
val = str(Data.Fields("FieldName").Value)
print val #prints 53, value is 53.750 in the database
val2 = 123.123 + 1
print val2 #prints 124.123 as expected
我在最后加入了val2作为一个健全的检查,以确保python没有错误地对待所有的数字。你知道吗
我编写了一个快速的C应用程序,它可以打开一个ODBC连接并打印一个数值。它打印正确的值:
using System;
using System.Collections.Generic;
using System.Data.Odbc;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
try
{
OdbcCommand cmd = new OdbcCommand("selectstatement", new OdbcConnection("dsn=as400;uid=pwd;pwd=pwd"));
cmd.Connection.Open();
var dr = cmd.ExecuteReader();
dr.Read();
var val = dr["fieldname"];
Console.WriteLine(val); //prints 53.750 as expected
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
}
}
因此,这似乎不是DSN的错误配置,因为C#读取正确。供应商和我一样不知所措。有没有人知道下一步该去哪里找/尝试什么?我检查了ADOType
属性,它打印4,这意味着它知道它也是一个单精度浮点。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐