2016-04-29 83 views
3

我試圖插入像µ爲varchar字符,但它不工作,我得到它說如何將特殊字符插入到Advantage SQL數據庫中?

不能Unicode字符轉換爲代碼頁字符

,因爲它是醫療文件的錯誤消息,我不允許更改任何數據。該計劃是寫在vb.net,它插入CSV數據轉化爲優勢SQL所以我嘗試這個功能

Public Shared Function Convert(ByVal input As String) As String 
     Dim OriginalCodierung As System.Text.Encoding = System.Text.Encoding.GetEncoding("utf-8") 
     Dim iso8859 As System.Text.Encoding = System.Text.Encoding.GetEncoding("iso-8859-1") 
     Dim enc As System.Text.Encoding = System.Text.Encoding.Default 

     Dim OriginalBytes As Byte() = OriginalCodierung.GetBytes(input) 
     Dim result As Byte() = System.Text.Encoding.Convert(OriginalCodierung, iso8859, OriginalBytes) 
     Dim s As String = enc.GetString(result) 
     Return s 

    End Function 

這在ISO8859 UTF8編碼,但它並沒有真正的幫助。

如何在不更改數據的情況下使用這些字符插入數據?

+0

我不熟悉那個數據庫,但在我用過的其他數據庫中,'varchar'只存儲單字節字符。例如在SQL Server中,您需要將'nvarchar'用於雙字節字符。你的數據庫是否有相應的數據類型?如果沒有,那麼我認爲你必須將數據存儲爲字節而不是字符。 – jmcilhinney

+0

優勢數據庫服務器只有字符https://devzone.advantagedatabase.com/dz/webhelp/Advantage8.1/server1/adt_field_types_and_specifications.htm – Sparkm4n

回答

2

我不知道這是否會回答你的問題:

使用參數化查詢:

using (SqlCommand com = new SqlCommand("INSERT INTO your_Table (column) " + 
             "VALUES (@INPUTVALUE)", con)) 
    { 
    com.Parameters.AddWithValue("@INPUTVALUE", @"""%$#@?,.;"); 
    com.ExecuteNonQuery(); 
    } 

要你一個轉義字符前綴他們LIKE表達式轉義特殊字符。您可以選擇使用ESCAPE關鍵字使用哪個轉義字符。 (如MSDN參考文獻)

例如,這逸出%符號,使用\作爲轉義字符:

SELECT * FROM your_table其中yourcolumnfield LIKE '%15 \折%' ESCAPE '\'

如果你不知道會是什麼角色在你的字符串,你不想把他們當作通配符,您可以前綴的所有通配符的使用轉義字符,如:

set @msearchString = replace(
       replace(
       replace(
       replace(@myString,'\','\\'), 
         '%','\%'), 
         '_','\_'), 
         '[','\[') 

(請注意,你也必須逃脫你的逃生字符)。那麼你可以使用這樣的事情:

select * from table where yourcolumnfield like '%' + @msearchString + '%' ESCAPE '\' 
+1

好吧,實際上它並沒有真正轉換這些字符,但我幸運地找到解決方案,我剛剛將編碼更改爲1252,如下所示:Dim iso8859 As System.Text.Encoding = System.Text.Encoding.GetEncoding(1252)thanks anyway – Sparkm4n

相關問題