[英]Inserting special characters in database with IBM.Data.DB2.ISeries provider
我一直在用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;
有沒有可用的選項可以成功地將那些字符寫入數據庫而不會出現該異常?
好吧,終於明白了。 它所要做的就是更改物理文件的CCSSID(它已經用CCSID 297編譯了一段時間)。
CHGPF FILE(MYLIB/MYFILE) CCSID(xxxx)
在我的情況下,我使用的是CCSID65535。但是,使用此字符串存儲字符串並不是那么簡單,我必須提取字符串的字節數組:
Dim command = connection.CreateCommand()
command.CommandText = "UPDATE table SET field = @value where ...."
command.DeriveParameters()
command.Parameters("@value").Value = Encoding.Unicode.GetBytes("'€€€€€]]]]]]]]]]]°°°°°°§§§§§'")
command.ExecuteNonQuery() ' Works... '
但是好消息是我現在幾乎可以存儲任何字符了:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.