0

データベースに非 ASCII 文字を保存する際に問題が発生しました。ここで同様の問題について多くの質問があることはわかっていますが、調査を行ったところ、行き詰まっています。データベースに COLLATE 設定の問題があることも知っていますが、私のものは正しいです。私が持っているのは非常に奇妙な問題です。

検索した単語をLINQを使用してデータベースに保存する関数が自動的に実行されます。これらの単語の一部には、(ċ、ħ、ġ、ż) などの非 ASCII 文字が含まれています。データベースを調べたときに、この問題があることに気付きました。一部の単語の文字 (上にリストしたものなど) が ASCII 文字に変更されていることがわかりました。Webフォームを介して非ASCII文字をまったく問題なく保存するプロジェクトにすでに取り組んでいたため、これは奇妙に感じました。ここでの唯一の違いは、単語が Web フォームから入力されていないことです。

全体的に奇妙なことは、非ASCII文字がWebから渡され、データベースに保存されると(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文字でした。混乱して申し訳ありません

4

1 に答える 1

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 + ")");
}
于 2013-04-29T13:01:23.493 に答える