我正在使用IBM.Data.DB2.iSeries在C#中读取DB2 iSeries数据,并且收到以下错误:
System.InvalidCastException: A conversion error occurred converting binary to string data.
at IBM.Data.DB2.iSeries.MPDataConverter.ConvertPtrToString(IntPtr pointer,
Int32 length, UInt16 jobccsid)
让我感到困惑的是,我甚至无法将查询结果读入这样的对象:
object o = reader.GetValue(7);
它可以在99%的记录中正常工作,但会在少数记录中抛出此异常。
更有趣的是,如果我使用ODBC读取数据,它适用于所有记录。
我已在连接字符串中尝试了这两种方法,并且它们都已成功连接,但它们无法解决转换错误:
iDB2ConnectionStringBuilder sb = new iDB2ConnectionStringBuilder();
sb.DataSource = "foo.com";
sb.UserID = "uid";
sb.Password = "pw";
sb.LibraryList = "LIB1";
sb.CharBitDataAsString = true;
sb.Naming = iDB2NamingConvention.SQL;
string cs = string.Format("DataSource={0};UserID={1};Password={2};" +
"Naming={3};LibraryList={4};CharBitDataAsString=true;",
"foo.com", "uid", "pw", "SQL", "LIB1");
答案 0 :(得分:0)
这是一种解决方法,而不是解决方案,但老实说,如果没有我在这里得到的反馈,我甚至不会这样做。我意识到这不太理想,但是如果有人在将来遇到这个问题的角落,它就是 选项。
SELECT
bzaitx, bzbldt, bzanva, bzcqcd, bzgncd, bzaldt, bzabtm,
case when hex (bzafvn) != '00000000000000000000' then bzafvn end,
bzagvn, bzamdt, bzactm, bzahvn,
case when hex (bzaivn) != '00000000000000000000' then bzaivn end
FROM foo.bar
为了它的价值,它解决了这个问题。
此外,作为一个感兴趣的说明,这影响了130万的90个记录。