我正在尝试通过.NET应用程序查询Sage Line 50。通过ODBC连接工作正常。我可以打开/关闭数据库并运行非常基本的查询,但我的一个查询稍微复杂一些,我需要包含默认的硬编码值,但它的行为非常奇怪。
当我在Microsoft Access中运行它并对链接表运行它时,查询工作正常,但是当我在.NET中运行它时,它会抛出一个未找到列的错误,这取决于我的值。
如果我的查询是
Select SELECT PURCHASE_LEDGER.ACCOUNT_REF AS SupplierCode, '10' as OrganizationNumber, ...
结果:10返回10.00
如果我的查询是
Select SELECT PURCHASE_LEDGER.ACCOUNT_REF AS SupplierCode, '' as City, ...
结果:我的OdbcDataReader只会将列返回到''的第一个实例,所以在这个实例中,它只会返回ACCOUNT_REF
如果我的查询是
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