使用LINQ-to-Entities时出现非ASCII字符问题

时间:2013-04-28 15:09:19

标签: c# sql linq-to-entities non-ascii-characters

我遇到了在数据库中保存非ASCII字符的问题。现在我知道这里有很多关于类似问题的问题但是我已经完成了我的研究并且我被困住了。我也知道数据库中存在COLLATE设置的问题,但我的是正确的。我所拥有的是一个非常奇怪的问题。

我有一个自动运行的函数,它使用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-to-Entities,我想知道是否仍然可以使用LINQ插入N前缀,因为这是我设法保存非ASCII字符的唯一方法。

提前致谢!

编辑:好的,显然我的意思是非ASCII而非非Unicode字符,抱歉造成混淆

1 个答案:

答案 0 :(得分:0)

我设法解决此问题的唯一方法是使用LINQ而不是使用AddObject()方法运行原始SQL。为此,我使用了ExecuteStoreCommand()。因此在我的情况下,我使用了这样的东西:

databaseEntities entityObject = new databaseEntities();

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