在执行QuickBooks在线ODBC驱动程序连接中的子查询时,连接被强制关闭。

10

我正在使用 QuickBooks Online ODBC(QODBC) 驱动程序的试用版,并配置了名为 QuickBooks Online Data 以及 QuickBooks Online Data QRemote 的 DSN。

我已确保连接使用测试工具,并能够使用所提到的测试工具和 C# 代码正确执行 SQL 查询。

请查找一些正常工作的示例查询:

select * from Account

select account.TimeCreated,account.TimeModified, TaxRate.ListID from account
left outer join TaxRate on account.ListID = TaxRate.ListID

select AVG(RateValue),SUM(RateValue) from TaxRate

select Top 5 ListID,RateValue from TaxRate

在测试工具中尝试执行子查询时,我遇到了以下问题。

使用的子查询:

select ListID from (select ListID, TimeCreated from Account)
异常:ERROR [42S00] ExecDirect数据包头:接收到错误:10054,远程主机强制关闭了一个现有的连接。如果远程主机上的对等应用程序突然停止、主机重启、主机或远程网络接口被禁用,或者远程主机使用“硬关闭”这通常会导致这种情况发生。

ERROR [42S00] 错误的套接字。套接字要么关闭,要么套接字引用无效。请访问qodbc.com/links/invalidsocket以获取更多信息。

我已经尝试了错误消息中提供的建议解决方案,但问题仍未得到解决。

我还在C#控制台应用程序中尝试了子查询执行并遇到了同样的问题。请问有人能告诉我如何解决这个问题吗?

选择Account中的ListID,这个语句有什么问题吗?至于实际问题,请粘贴您的repo代码以获得更好的可见性,您也可以尝试使用EF。@Janakiraman - Sumit raj
@Sumitraj select ListId from Account 应该可以工作,因为根据所提供的示例,...left outer join... 语句在 on account.ListID = TaxRate.ListID 上工作。 - user51187286016
1
可以执行这个查询/正常工作:从账户中选择ListID @Sumitraj - Janakiraman
3个回答

0
希望这可以帮到你:
select tmp.ListID from (select ListID, TimeCreated from account) as tmp

(不确定QODBC语法,所以我选择了普通SQL)

编辑:

也可能是QODBC系统不支持完整的SQL语法,因此嵌套的select将会失败(确实会有非常奇怪的错误信息 - 但程序员在编写有用的错误信息方面出了名的糟糕)。您可以通过最简单的嵌套select来快速测试:

select * from (select 1)

或者:

select * from (select 1) as tmp

如果两者都失败了,那么这意味着你请求的另一端的SQL解释器不够好。解决方法是以避免使用不支持的语法的方式“重新表述”您的select语句。如果我知道实际请求是什么,我可以帮忙处理。

0
在执行QuickBooks Online ODBC驱动程序连接的子查询过程中,连接被强制关闭。这个问题可能与超时、网络不稳定或ODBC驱动程序本身的问题有关。确保使用最新的驱动程序版本,检查网络连接或调整超时设置可能会解决这个问题。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接