我在使用 VB.Net 编写的依赖于 iSeries 数据库的应用程序时遇到了问题。用户可以保存笔记,这些笔记(非常)通常是从他们的邮箱中复制/粘贴的。
但是许多邮件包含在数据保存到数据库时触发 iDb2ConversionException 的无效字符。
目前,我清理数据,用匹配的 html 实体替换无效字符,但我真的不喜欢这种方法:
- 我必须维护一个转换列表,即使我设法覆盖了大多数无效字符,新的字符总是会出现。
- 如果我在客户端访问中使用 STRSQL 运行相同的命令,我实际上可以插入那些无效字符。
- 我们有许多固定长度的字段,并且用 HTML 实体替换字符使得在 UI 级别强制执行最大字符串长度变得更加困难
如果我不使用参数,则相同的命令适用于 ADO.NET(但是我必须再次清理用户输入,所以总而言之......它只是将问题转移到其他地方)
Dim command = connection.CreateCommand()
command.CommandText = "UPDATE table SET field = '€€€€€]]]]]]]]]]]°°°°°°§§§§§' where ...."
command.ExecuteNonQuery() ' Executes successfully '
Dim command = connection.CreateCommand()
command.CommandText = "UPDATE table SET field = @value where ...."
command.DeriveParameters()
command.Parameters("@value").Value = "'€€€€€]]]]]]]]]]]°°°°°°§§§§§'"
command.ExecuteNonQuery() ' Throws iDb2ConversionException '
我的连接字符串如下:
Datasource=server;DataBase=DBNAME;DefaultCollection=DBCOLLECTION;HexParserOption=Binary;LibraryList=LIBRARIES;Naming=SQL;DataCompression=True;AllowUnsupportedChar=true;
是否有任何选项可以成功地将这些字符写入数据库而不会出现异常?