Я использую драйвер ODBC для подключения к базе данных Progress через приложение Windows C #.Проблема, с которой я столкнулся, заключается в том, что мои данные усекаются.
SELECT
CASE
WHEN (table1_qty_comp = 0) THEN 'Pending'
ELSE
CASE WHEN (table1_qty_comp >= table2_qty_req) THEN 'Completed'
ELSE 'In-Process'
END
END AS 'Status'
FROM
table1 LEFT JOIN table2 ON table1_part = table2_part
В столбце «Состояние» отображаются только 8 символов, поэтому «В процессе» превращается в «В обработке».
IПробовал различные приведения / преобразования, такие как
cast('In-Process' as varchar)
cast('In-Process' as varchar(12))
cast('In-Process' as nvarchar)
cast('In-Process' as nvarchar(12))
convert(varchar(12), 'In-Process')
convert(nvarchar(12), 'In-Process')
str('In-Process')
, но безрезультатно.Как получить полный «In-Process» для отображения в моем столбце?
Вот как я запрашиваю базу данных Progress из C #
DataTable dt = new DataTable();
try
{
using (OdbcConnection conn = new OdbcConnection(GetConnectionString(db)))
{
OdbcCommand cmd = new OdbcCommand(qry, conn);
conn.Open();
OdbcDataAdapter adpt = new OdbcDataAdapter(cmd);
adpt.Fill(dt);
}
}
catch (OdbcException e)
{
}
return dt;
Обновление
Я хотел дополнить свой вопрос полезной информацией ... Это драйвер ODBC: Vendor = DataDirect, Progress SQL92 v9.1E, версия 4.10.01.Вот некоторые ресурсы для этого конкретного драйвера, предоставленные другим пользователем в комментариях: здесь и здесь Кроме того, я смог решить мою проблему, не используя вложенные операторы CASE
, такие как:
SELECT
CASE
WHEN (table1_qty_comp = 0) THEN 'Pending'
WHEN (table1_qty_comp >= table2_qty_req) THEN 'Completed'
ELSE 'In-Process'
END AS 'Status'
FROM
table1 LEFT JOIN table2 ON table1_part = table2_part