簡體   English   中英

使用IBM.Data.DB2.ISeries提供程序在數據庫中插入特殊字符

[英]Inserting special characters in database with IBM.Data.DB2.ISeries provider

我一直在用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;

有沒有可用的選項可以成功地將那些字符寫入數據庫而不會出現該異常?

好吧,終於明白了。 它所要做的就是更改物理文件的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM