Sage Line 50 SQL Query выбрасывает ошибку "Столбец не найден" или возвращаются числовые данные
Я пытаюсь запросить Sage Line 50 через приложение.NET. Подключение через ODBC работает нормально. Я могу открывать / закрывать базу данных и выполнять очень простые запросы, но один из моих запросов немного сложнее, и мне нужно включить жестко заданные значения по умолчанию, но он ведет себя очень странно.
Запрос отлично работает, когда я запускаю его в Microsoft Access и запускаю его для связанных таблиц, но когда я запускаю его в.NET, он выдает ошибку столбца not found, ну, в зависимости от моих значений.
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 Country
или же '--' as Country
это будет работать, но вернет 0,00 вместо пустой строки
Итак, мои вопросы:
1) Почему MS Access ведет себя по-разному и позволяет мне возвращать пустое значение, когда мой запрос включает '' as City
например, но он не может вернуть его при запросе через.NET
2) Почему он не позволяет использовать буквенно-цифровые значения, такие как "ГБ", в качестве жестко закодированных значений, не выбрасывая столбец не найден.
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
- Город выдаст ошибку т.е. столбец не найден
- PostCode приведет к тому, что остальные поля не будут возвращены
- PostCode1 вернет 0,00 вместо '-'
- OrganizationNumber вернет 10,00 вместо 10