2

このチェコ語の文字には小さな問題がありますů。この小さなバグは、C# コードから更新がトリガーされたときに、MS SQL テーブルに保存されません。

SQL Management Studio に手動で追加すると、保存され、Web サイトにも通常どおり表示されます。

しかし、C# からそれを保存するプロセスはu、テーブルに保存されている文字でのみ終了し、 ů.

私のDBフィールドは and 型nvarcharntext、DBの照合は ですFrench_CI_AS。MSSQL 2008 を使用しています。

コード:

SqlCommand sqlcomLoggedIn = new SqlCommand("UPDATE Table SET id = 1, title = 'Title with ů' WHERE id = 1", sqlCon, sqlTrans);
int status = sqlcomLoggedIn.ExecuteNonQuery();

何かご意見は?

4

1 に答える 1

7

差し迫った問題は、Unicodeリテラルを使用していないことです。次のようにする必要があります。

UPDATE Table SET id = 1, title = N'Title with ů' WHERE id = 1

N重要です。

はるかに大きな問題は、パラメータを使用する必要があるということです。

int id = 1;
string title = "Title with ů";
// ^^ probably coming from C# parameters

using(var sqlcomLoggedIn = new SqlCommand(
    "UPDATE Table SET title = @title WHERE id = @id", sqlCon, sqlTrans))
{
    sqlcomLoggedIn.Parameters.AddWithValue("id", id);
    sqlcomLoggedIn.Parameters.AddWithValue("title", title);
    int status = sqlcomLoggedIn.ExecuteNonQuery();
}

その後、問題は解決し、キャッシュされたクエリプランを使用できるようになり、SQLインジェクションを回避できます

于 2013-03-07T12:16:59.533 に答える