Sage Line 50 SQL Query抛出未找到列的错误或返回数值数据

时间:2015-05-13 15:25:03

标签: c# .net sage-line-50

我正在尝试通过.NET应用程序查询Sage Line 50。通过ODBC连接工作正常。我可以打开/关闭数据库并运行非常基本的查询,但我的一个查询稍微复杂一些,我需要包含默认的硬编码值,但它的行为非常奇怪。

当我在Microsoft Access中运行它并对链接表运行它时,查询工作正常,但是当我在.NET中运行它时,它会抛出一个未找到列的错误,这取决于我的值。

1)返回数字数据

如果我的查询是

Select SELECT PURCHASE_LEDGER.ACCOUNT_REF AS SupplierCode, '10' as OrganizationNumber, ...

结果:1​​0返回10.00

2)缺少列:

如果我的查询是

Select SELECT PURCHASE_LEDGER.ACCOUNT_REF AS SupplierCode, '' as City, ...

结果:我的OdbcDataReader只会将列返回到''的第一个实例,所以在这个实例中,它只会返回ACCOUNT_REF

3)未找到列错误:

如果我的查询是

Select SELECT PURCHASE_LEDGER.ACCOUNT_REF AS SupplierCode, 'GB' as Country, ...

它会抛出一个未找到列的错误。然而,如果我使用'-' as Country'--' as Country它会起作用,但它返回0.00而不是空字符串

所以我的问题是:

1)为什么MS Access的行为不同,并允许我在查询包含'' as City时返回空值,但在通过.NET查询时无法返回

2)为什么不允许我使用字母数字值(例如'GB')作为编码值而不抛出未找到的列。

3)为什么它允许我使用'-' as Country但返回0.00

这些是否有解决方法?我真的需要为某些字段返回硬编码的空值,为某些其他字段返回带有字母数字的值,并且当它们不应该有值时,我不能返回带有小数位的值。

它疯了几个小时,我需要保持这种通用性,而我遇到其他问题,例如查询无法连接列,我已经解决了这个问题,但我试图保持我的应用程序尽可能通用,因此在我的xml定义中引入奇怪的参数似乎没有意义。我一直在考虑引入一个'默认'值,在定义字段映射时在技术上是可以接受的,但是当它应该是一个空字符串时返回的值为0.00,那么值应该是1,2,3被退回1.00,2.00等...

所以我希望有人知道如何在查询级别解决这个问题,而不是通过代码来解决狡猾问题。

感谢。

更新:

如果有帮助的话,这是我的完整查询:

SELECT PURCHASE_LEDGER.ACCOUNT_REF AS SupplierCode, 
       PURCHASE_LEDGER.NAME AS SupplierName, 
       PURCHASE_LEDGER.ADDRESS_1, 
       PURCHASE_LEDGER.ADDRESS_2, 
       PURCHASE_LEDGER.ADDRESS_3, 
       PURCHASE_LEDGER.ADDRESS_4, 
       PURCHASE_LEDGER.ADDRESS_5,
       'London' AS City,
       COUNTRY_CODE.Name AS Country, 
       '' AS PostCode,
       '-' AS PostCode1,
       PURCHASE_LEDGER.VAT_REG_NUMBER AS TaxRegistrationNumber, 
       '10' AS CorporateGroupId,
       COUNTRY_CODE.Name AS Location, 
       CURRENCY.CODE AS CurrencyCode
  FROM (PURCHASE_LEDGER 
       INNER JOIN CURRENCY ON PURCHASE_LEDGER.CURRENCY = CURRENCY.NUMBER) 
       INNER JOIN COUNTRY_CODE ON PURCHASE_LEDGER.COUNTRY_CODE = COUNTRY_CODE.CODE
  1. City将抛出错误,即找不到列
  2. PostCode将导致不返回其余字段
  3. PostCode1将返回0.00而不是' - '
  4. OrganizationNumber将返回10.00而不是10

0 个答案:

没有答案