我一直在使用VB.Net编写的依赖于iSeries数据库的应用程序出现问题。用户可以保存通常从其邮箱中复制/粘贴的注释。
但是,当数据保存到数据库时,许多邮件包含触发iDb2ConversionException的无效字符。
目前,我擦洗数据,用匹配的html实体替换无效字符,但我真的不喜欢这种方法:
如果我不使用参数,那么同样的命令可以与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;
是否有任何选项可以成功地将这些字符写入数据库而不会出现异常?
答案 0 :(得分:1)
CHGPF FILE(MYLIB/MYFILE) CCSID(xxxx)
就我而言,我正在使用CCSID 65535.但是,使用这个,存储字符串并不是那么简单,我必须提取字符串的字节数组:
Dim command = connection.CreateCommand()
command.CommandText = "UPDATE table SET field = @value where ...."
command.DeriveParameters()
command.Parameters("@value").Value = Encoding.Unicode.GetBytes("'€€€€€]]]]]]]]]]]°°°°°°§§§§§'")
command.ExecuteNonQuery() ' Works... '
但好处是我现在几乎可以存储任何角色:)