【发布时间】:2021-10-25 19:20:24
【问题描述】:
我有以下查询将行中的一些数据放在列中:
string qry3 =
"SELECT TABLENAME1.SLONO AS ORDER, TABLENAME1.SLLNNO AS LINE " +
", MAX(CASE WHEN TABLENAME2.CZVRNM in ('SLEEVEDEPTH', 'LENGTH') THEN CAST(RTRIM(TABLENAME2.CZREFD) AS FLOAT(53)) END) AS SLEEVE " +
", MAX(CASE WHEN TABLENAME2.CZVRNM in ('INSTALLATION') THEN CAST(RTRIM(TABLENAME2.CZREFD) AS FLOAT(53)) END) AS DAMPER_AI " +
"FROM LOCATION.LOCATION2.TABLENAME1 TABLENAME1 LEFT JOIN LOCATION.LOCATION2.TABLENAME2 TABLENAME2 " +
" ON (TABLENAME1.SLONO = TABLENAME2.SPONO AND TABLENAME1.SLLNNO = TABLENAME2.SPLNNO) " +
"GROUP BY TABLENAME1.SLONO, TABLENAME1.SLLNNO ";
但是当我尝试在以下代码中运行它时:
try
{
conAS400.Open();
iDB2Command command = conAS400.CreateCommand();
command.CommandText = qry3;
command.CommandTimeout = 0;
iDB2DataReader reader = command.ExecuteReader();
dtAS400 = new DataTable();
dtAS400.Load(reader); //<-- The exception occurs here. I can't even catch it
conAS400.Close();
retrieved = true;
}
catch (Exception ex)
{
MessageBox.Show("Could not retrive the information. Exception: " + ex.Message);
retrieved = false;
}
finally
{
conAS400.Close();
}
我得到了这个例外:
"IBM.Data.DB2.iSeries.iDB2DCFunctionErrorException: '意外 发生异常。类型:System.AccessViolationException,消息: 尝试读取或写入受保护的内存。这通常是一个 指示其他内存已损坏..'"
我还有其他可以正常工作的查询,但这个不行。我什至尝试了如下 SQL 查询(感谢 Gordon Linoff 提供此代码):
SELECT
A.IDA, A.SomeInfo,
MAX(CASE WHEN VarName in ('Depth', 'Depth2') THEN VarValue END) AS Depth,
MAX(CASE WHEN VarName in ('Length') THEN VarValue END) AS Length
FROM
A
LEFT JOIN
B ON A.IDA = B.IDA
GROUP BY
A.IDA, A.SomeInfo
而且它有效。我能做什么?
司机:
客户端访问 ODBC 驱动程序(32 位)12.00.00.00
iSeries Access ODBC 驱动程序 12.00.00.00
编辑:这是没有字符串的 sql 查询。
SELECT TABLENAME1.SLONO AS ORDER, TABLENAME1.SLLNNO AS LINE,
MAX(CASE WHEN TABLENAME2.CZVRNM in ('SLEEVEDEPTH', 'LENGTH') THEN CAST(RTRIM(TABLENAME2.CZREFD) AS FLOAT(53)) END) AS SLEEVE,
MAX(CASE WHEN TABLENAME2.CZVRNM in ('INSTALLATION') THEN CAST(RTRIM(TABLENAME2.CZREFD) AS FLOAT(53)) END) AS DAMPER_AI
FROM LOCATION.LOCATION2.TABLENAME1 TABLENAME1 LEFT JOIN LOCATION.LOCATION2.TABLENAME2 TABLENAME2
ON (TABLENAME1.SLONO = TABLENAME2.SPONO AND TABLENAME1.SLLNNO = TABLENAME2.SPLNNO)
GROUP BY TABLENAME1.SLONO, TABLENAME1.SLLNNO
【问题讨论】:
-
请编辑您的问题(不要使用 cmets)以添加您正在使用的 Db2 驱动程序的版本,以及它是哪种类型的驱动程序。通常有必要确保您拥有 IBM 提供的驱动程序的最新修订包(如果驱动程序的供应商是 IBM)。
-
这个问题似乎与管理/配置相关,可以在 dba.stackexchange.com 找到更好的答案。
-
感谢您的 cmets。我已经编辑了我的问题并将其发布在 dba.stackexchange.com 上。
-
我有版本 12.00.02.00 的 ODBC 驱动程序,并且在旋转时一直在做这种事情。作为实验,您可以更改与 OLE DB 驱动程序的连接,甚至更好的是 IBM.Data.DB2.iSeries.dll 驱动程序。
-
@Mike 我想我有 IBM.Data.DB2.iSeries.dll 驱动程序?我直接在visual studio中添加了该dll作为参考。这是我第一次处理 as400(也是作为开发人员的第一份工作),我在处理这个问题时遇到了很多麻烦。你如何看待这种东西?
标签: c# sql db2 ibm-midrange db2-400