DB2 iSeries二进制到字符串错误
本文关键字:字符串 错误 二进制 iSeries DB2 | 更新日期: 2023-09-27 18:10:58
我正在使用IBM.Data.DB2在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");
这是一种变通方法,而不是解决方案,但老实说,如果没有我在这里得到的反馈,我甚至不会有这个。我知道这不是很理想,但是如果将来有人被这个问题逼到墙角,那就是和选项。
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条。