2

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

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

1) 返回数值数据

如果我的查询是

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

结果:10 返回为 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 Countryor'--' 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
4

0 回答 0