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



我正在使用QuickBooks Online ODBC (QODBC)驱动程序的试用版,并配置了名为QuickBooks Online Data以及Quick Books 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)

异常:错误[42S00]ExecDirect数据包标头-收到错误:10054,远程主机已强制关闭现有连接。如果远程主机上的对等应用程序突然停止,主机重新启动,主机或远程网络接口被禁用,或者远程主机使用";硬关闭";

错误[42S00]错误无效套接字。套接字已关闭,或者套接字引用无效。有关更多信息,请访问:qodbc.com/links/invalidsocket

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

此外,还尝试在c#控制台应用程序中执行子查询,但遇到了同样的问题。

任何人,请告诉我解决这个问题的可能解决方案?

希望这能有所帮助:

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语句,以避免这种不受支持的语法。如果我知道实际的请求是什么,我可以帮忙。

我不能100%确定这一点,但可能是这里使用的ODBC后端(QuickBooks Online(只支持SQL标准的非常有限的子集。

您可以在这里看到支持的查询语法:

  • https://developer.intuit.com/app/developer/qbo/docs/learn/explore-the-quickbooks-online-api/data-queries

需要注意的是,QuickBooksOnline根本不支持子查询

我想知道QODBC是否基本上只是将原始SQL传递给QuickBooks。。。而QuickBooks不支持它,所以它崩溃/出错了?

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

最新更新