2013-04-28 104 views
0

我在保存數據庫中的非ASCII字符時遇到了問題。現在我知道這裏有很多關於類似問題的問題,但是我已經完成了我的研究並且被卡住了。我也知道數據庫中存在COLLATE設置的問題,但我的觀點是正確的。我所擁有的是一個非常奇怪的問題。使用LINQ-to-Entities時出現非ASCII字符問題

我有一個自動運行的功能,它使用LINQ將檢索到的字保存到數據庫中。其中一些單詞包含非ASCII字符,如(ċ,ħ,ġ和ż)。當我看到我的數據庫時,發現我遇到了這個問題,並且發現有些字詞(如上面列出的字符)更改爲ASCII字母。我發現這很奇怪,因爲我已經在一個項目中工作,在那裏我通過一個Web表單保存非ASCII字符,而沒有任何問題。唯一的區別在於這些詞不是通過網絡表單輸入的。

所以總的來說,奇怪的是:當非ASCII字符從網絡傳遞並保存在數據庫中(使用LINQ)時,這些字符被保存。將相同的字符串和參數寫入SQL語句並運行非ASCII字符時不保存。我不明白髮生了什麼事。我試過使用:

System.Data.Objects.EntityFunctions.AsNonUnicode([word]) 

但它沒有工作。我也在SQL語句中測試了N前綴,並且確實有效。

UPDATE tblWords 
    SET Word = N'żabbar' 
    WHERE ID = 19061 

因爲我在我的應用程序是我使用LINQ到實體,我想知道是否有反正可以使用LINQ可以插入一個N字頭,導致這就是我設法挽救非唯一的出路-ASCII字符。

在此先感謝!

編輯:好吧,顯然我的意思是非ASCII沒有非Unicode字符,遺憾的混亂

回答

0

我設法解決這個問題的唯一方法是通過運行使用LINQ原始SQL代替使用AddObject()方法。爲此,我使用了ExecuteStoreCommand()。因此,在我的情況下,我用這樣的事情:

databaseEntities entityObject = new databaseEntities(); 

public void AddWord(Word word) { 
    entityObject.ExecuteStoreCommand("INSERT INTO tblWords VALUES (N'" + word.Word + "', " + word.TotalCount + ")"); 
}