在偏移量:0 处获得 TDS 响应中的意外值

Posted

技术标签:

【中文标题】在偏移量:0 处获得 TDS 响应中的意外值【英文标题】:got unexpected value in TDS response at offset:0 【发布时间】:2013-09-27 12:23:25 【问题描述】:

我正在使用 JDBC 驱动程序版本 1.2.2828.100 和 Database Sql Server 2008 R2。

我正在通过连接三个包含 1,40,000 行的表来进行搜索操作

SELECT USERID, USERLOGIN, DOMAIN FROM USER (nolock), USER01 (nolock), DOMAIN (nolock) WHERE USERLASTNAME= "aa" AND USERFIRSTNAME = "bb" AND USERDOMAINID = DOMAINID AND USERID = USER01ID ORDER BY USERID

我收到以下错误,我的应用程序立即崩溃

com.microsoft.sqlserver.jdbc.TDSReader throwInvalidTDS 严重:TDSReader@d5ccfa (ConnectionID:11 TransactionID:0x0000000000000000) 在偏移量:0 处的 TDS 响应中获得了意外值

偏移量:0 处的 TDS 响应指的是什么? 如何解决?

【问题讨论】:

【参考方案1】:

好的,TDS 是表格数据流。这是客户端(机器)与数据库(服务器)对话的方式。您正在使用 microsoft jdbc 驱动程序。

这里有一些改进代码和解决问题的方法。

1 - 请使用 ANSI 20xx 标准。

这意味着查询将被重写如下。

-- Updated using newer syntax
SELECT 
    U0.USERID, 
    U0.USERLOGIN, 
    D0.DOMAIN 
FROM 
    USER as U0 with (nolock) INNER JOIN 
    USER01 as U1 with (nolock) ON U0.USERID = U1.USER01ID  INNER JOIN 
    DOMAIN as D0 with (nolock) U0.USERDOMAINID  = D0.DOMAINID 
WHERE 
    U0.USERLASTNAME= "aa" AND 
    U0.USERFIRSTNAME = "bb" 
ORDER BY 
    U0.USERID

我不提倡 (nolock) 但那是一场完全不同的战斗。

2 - 接下来看这篇文章。用户发现类型案例导致了问题。确保数据类型与 JAVA 兼容。http://adrielservice.com/blog/?p=362

我希望这会有所帮助。

约翰

【讨论】:

谢谢约翰。我已经更改了我的查询,并且我还交叉检查了类型案例。问题仍然存在。当我尝试多次执行相同的查询时说(一分钟 3 到 5 次)我得到这个错误。打算换个驱动检查一下。 只是一个想法,但如果它仍然存在于您的 Office 版本中,请尝试通过 MS Query 运行查询。您可以使用本机客户端驱动程序或 ODBC。使用上面的查询。如果它有效,那肯定是驱动程序 2 Java 问题。祝你好运 我重新阅读了您的回复。因此,您每分钟执行 3 到 5 次查询。这是一个单一的过程吗?您是否针对阻塞或死锁发出警报?我想知道您是否遇到并发问题。设置 IO 统计和 TIME。查询需要多长时间?您是否使用了良好的查询计划。如果驱动程序升级不能解决问题,请调查一些事情。

以上是关于在偏移量:0 处获得 TDS 响应中的意外值的主要内容,如果未能解决你的问题,请参考以下文章

preg_grep():编译失败:在偏移量 0 处没有可重复的内容

元素偏移量 offset

当我尝试使用 Laravel 中的“别名”从数据库中获取值时如何修复“未定义的偏移量:0”

memset 指针 + 偏移量

以编程方式确定在一天/时间的偏移量处使用 UTC 时间

从正则表达式中得到错误“在偏移量 1 处没有重复的内容”