我正在尝试进行设置,以便我可以从 AS400 数据库中读取二进制数据,而不必在每个选定的列上放置“CAST(TABLE.COL AS CHAR(29) CCSID 37) COL”。每次都这么说很痛苦,更不用说将列大小耦合到 C# 代码了(我想我可以将所有内容转换为 VARCHAR(9999),但是...)。
我假设我可以通过 ADO.Net 的连接字符串来做到这一点。但是,在尝试了我阅读过的各个页面中的每个建议设置以尝试使其正常工作之后,它们都给出了“ConnectionString 属性无效”。错误。
我已经尝试了以下每一种方法,它们都给出了相同的错误:
var connectionString = "DataSource=" + /*blah blah...*/ +
//"; CCSID=37; TRANSLATE=1" +
//"; BinAsChar=true; CCSID=37;" +
//"; BinAsChar=true; CCSID=37; TRANSLATE=1" +
//"; BinAsChar=true; CCSID=37; Force Translate=1" +
//"; BinAsChar=true; CCSID=37; ForceTranslation=1" +
//"; CCSID=37; ForceTranslation=1" +
//"; ForceTranslation=1" +
//"; CCSID=37" +
//"; Host CCSID=37" +
//"; CharsetFor65535=0" +
//"; CCSID=EBCDIC" +
"";
有什么办法可以让它发挥作用吗?还是我必须继续污染我的所有查询?
最佳答案
自从 Redbook Mike 引用资料发布以来,看起来已经有所改进。
在 7.1 DB2 for i .NET Provider Technical Reference(作为 iAccess for Windows 或较新的 ACS Windows 应用程序包的程序员工具包组件的一部分安装)中,有几个有趣的属性...
iDB2Connection.CharBitDataAsString 属性
获取一个 bool 值,该值指示是否应将标记有 CCSID 65535 的字符位数据转换为字符串数据。
iDB2ProviderSettings.CharBitDataCcsid 属性
当 CharBitDataAsString 属性设置为 True 时,指定用于转换 iDB2CharBitData 和 iDB2VarCharBitData 类型的 CCSID。当 CharBitDataAsString 设置为 False 时,将忽略此属性。
关于c# - 如何转换 AS400 ADO.Net 连接字符串中的 CCSID 65535 个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51753095/