C# Sage第50行SQL查询抛出未找到列错误或返回数字数据
我正在尝试通过.NET应用程序查询Sage Line 50。通过ODBC连接工作正常。我可以打开/关闭数据库并运行非常基本的查询,但我的一个查询稍微复杂一些,我需要包含默认的硬编码值,但它的行为非常奇怪 当我在Microsoft Access中运行该查询并对链接表运行它时,该查询工作得非常好,但当我在.NET中运行它时,它会抛出一个列not found错误,这取决于我的值 1) 返回的数字数据 如果我的问题是C# Sage第50行SQL查询抛出未找到列错误或返回数字数据,c#,.net,sage-line-50,C#,.net,Sage Line 50,我正在尝试通过.NET应用程序查询Sage Line 50。通过ODBC连接工作正常。我可以打开/关闭数据库并运行非常基本的查询,但我的一个查询稍微复杂一些,我需要包含默认的硬编码值,但它的行为非常奇怪 当我在Microsoft Access中运行该查询并对链接表运行它时,该查询工作得非常好,但当我在.NET中运行它时,它会抛出一个列not found错误,这取决于我的值 1) 返回的数字数据 如果我的问题是 选择“选择采购”\u分类账.ACCOUNT\u REF作为供应商代码,“10”作为组织
选择“选择采购”\u分类账.ACCOUNT\u REF作为供应商代码,“10”作为组织编号,…
结果:10返回为10.00
2) 缺少列:
如果我的问题是
选择“选择采购”\u分类账.ACCOUNT\u REF作为供应商代码”,“作为城市,…
结果:我的OdbcDataReader将只返回到“”的第一个实例的列,因此在此实例中,它将只返回ACCOUNT\u REF
3) 未找到列错误:
如果我的问题是
选择“选择采购”\u分类账.ACCOUNT\u REF作为供应商代码,“GB”作为国家/地区,…
它将抛出一个找不到该列的错误。但是,如果我使用'-'作为国家/地区
或'-'作为国家/地区
,它将工作,但它返回0.00而不是空字符串
因此,我的问题是:
1) 例如,当我的查询将''包含为City
时,为什么MS Access的行为会有所不同,并允许我返回空值,但通过.NET查询时,它无法返回空值
2) 为什么它不允许my使用字母数字值(如“GB”)作为harcoded值,而不抛出未找到的列
3) 为什么它允许我使用“-”作为国家/地区
,但返回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