gpt4 book ai didi

java - ODBC 错误 : Invalid String or Buffer Length--Microsoft Server 2008 32bit vs 2008 R2 64bit

转载 作者:行者123 更新时间:2023-11-30 09:51:51 25 4
gpt4 key购买 nike

尝试使用 SQL Server Native Client 10.0 通过 ODBC 系统 DSN 从 Java 6 控制台应用程序连接到 Microsoft Windows Server 2008 R2 64 位系统上的 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 Driver Manager] invalid string buffer length

令人抓狂的是,相同的代码,以及以完全相同的方式配置的 ODBC 系统 DSN,WORKS 与 MS Server 2008 32 位(非 R2)和 MS SQL Server 2008 R2。两个系统之间的 Microsoft ODBC 驱动程序 dll 是不同的版本,6.0.xxxx 和 6.1.xxxx,我怀疑这是罪魁祸首。

最佳答案

是的,ODBC 管理器版本应该是问题所在。下面是我遇到的问题和我想到的解决办法,希望对其他人也有帮助。

当尝试从部署到 Jboss 4.x 的应用程序对系统 ODBC DSN(MS Access .mdb 文件)运行查询时,我得到同样的错误:“SQL 状态 [S1090];错误代码 [0];[Microsoft] [ODBC 驱动程序管理器] Windows Server R2 中的无效字符串或缓冲区长度”。

我在两台不同的 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 读取 mdb 文件并将其内容写入 .csv 文件,Jboss 应用程序将读取该文件。

如果有人找到更好的解决方案,请告诉我。

关于java - ODBC 错误 : Invalid String or Buffer Length--Microsoft Server 2008 32bit vs 2008 R2 64bit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4494467/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com