DB2 iSeries二进制到字符串错误

时间:2015-09-03 14:29:20

标签: c# db2

我正在使用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");

1 个答案:

答案 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个记录。