Попытка подключиться из консольного приложения Java 6 к Microsoft SQL Server 2008 R2 в 64-битной системе Microsoft Windows Server 2008 R2 через системный DSN ODBC с использованием SQL Server Native Client 10.0. Следующий исходный код:
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] недопустимая длина строкового буфера.
Ужасно, но тот же код с DSN системы ODBC, настроенным точно так же, РАБОТАЕТ с 32-битным MS Server 2008 (не R2) и MS SQL Server 2008 R2. DLL-файлы драйвера Microsoft ODBC между двумя системами имеют разные версии, 6.0.xxxx и 6.1.xxxx, что, как я подозреваю, является виновником.