ODBC错误:无效的字符串或缓冲区长度 - Microsoft Server 2008 32位与2008 R2 64位

尝试使用SQL Server Native Client 10.0通过ODBC系统DSN在Microsoft Windows Server 2008 R2 64位系统上从Java 6控制台应用程序连接到Microsoft SQL Server 2008 R2。以下源代码:
        try
        {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            String srcURL = "jdbc:odbc:FOO";
            if (dbc == null)
            {
                dbc = DriverManager.getConnection(srcURL);
                dbc.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
            }
            else
            {
                dbc.close();
                dbc = DriverManager.getConnection(srcURL);
                dbc.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
            }
        }
        catch (ClassNotFoundException cx)
        {
            System.out.println("class not found");
        }
        catch (SQLException sx)
        {
            System.out.println("SQL Exception: " + sx);
            log.info("SQL Exception: " + sx);
    }
引发错误   java.sql.exception [Microsoft] [ODBC驱动程序管理器]无效的字符串缓冲区长度 疯狂地,相同的代码,以及以完全相同的方式配置的ODBC系统DSN,与MS Server 2008 32位(非R2)和MS SQL Server 2008 R2一起使用。两个系统之间的Microsoft ODBC驱动程序dll是不同的版本,6.0.xxxx vs 6.1.xxxx,我怀疑是罪魁祸首。     
已邀请:
是的ODBC管理器版本应该是问题。下面是我遇到的问题以及我想到的解决方案,希望它对其他人也有帮助。 当尝试从部署到Jboss 4.x的应用程序运行对系统ODBC DSN(MS Access .mdb文件)的查询时,我得到相同的错误:“SQL状态[S1090];错误代码[0]; [Microsoft] [ODBC驱动程序管理器]无效的字符串或缓冲区长度“在Windows Server R2中。 我在2台不同的Windows Server R2计算机上重现了同样的错误。在Windows Server Standard(我猜R1)和Windows 7 Professional x64上,问题不可重现。 此外,在尝试直接连接时(从独立应用程序)在同一Windows Server R2上,我没有遇到此问题。如果应用程序无法连接/检测数据源,则会收到错误消息,指出没有此类DSN名称或找不到该名称。尝试将空查询发送到ODBC数据源(已注册的数据源名称 - DSN)时,将引发相同的错误消息。所以我想ODBC获取一个空查询,试图对DS执行,结果是:无效的字符串或缓冲区长度。 因为我可以读取注册为具有给定DSN的ODBC DS的.mdb文件,并且在从独立应用程序查询时没有收到此错误,我将创建一个独立的应用程序,通过以下方式读取.mdb文件ODBC并将其内容写入.csv文件,Jboss应用程序将读取该文件。 如果有人找到更好的解决方案,请告诉我。     
JDBC-ODBC桥接本机代码的问题。 本机代码使用无效的BufferLength参数调用ODBC函数SQLGetData。 此问题仅发生在64位jvm上。据我所知,它可能发生在所有jdks上:从1.0到1.7。 BufferLength是一个8字节的SQLLEN参数。高4字节在64位jvm中未初始化,这是根本原因。 目前没有解决方法,即使我通过oracle metalink网站报告,Oracle也拒绝解决此问题。     
这是一个java bug,至少升级到java 1.7.70。     

要回复问题请先登录注册