Python从ODBC连接中截断数字

时间:2015-12-11 23:46:31

标签: python odbc ado

我有一个在Server 2003上运行的生产系统,必须在昨天/今天重建,与我们的AS400(DB2)进行对话。该系统现在是Windows 7 x64。它使用ADO对象来完成此操作,连接字符串中的提供程序指定为MSDASQL,并使用系统数据源(dsn)。问题是数值被截断。这是剪切测试版本,其输出为注释(完整脚本编写为强制转换Data.Fields()。值为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#正确读取它。供应商就像我一样迷失了。有没有人对下一步的搜索/下一步尝试有什么想法?我检查了ADO Type属性并打印出4,这意味着它知道它也是一个精度浮点数。

0 个答案:

没有答案