2016-07-31 9 views
1

C#で書かれた自分のウェブサイトやアプリケーションの翻訳に役立つ簡単なアプリケーションを作成しました。しかし、私はSQL Serverに特別な文字を挿入する方法がわかりません。以前はPHPでMySqlを使用していました。今、私はC#で、このコマンドを使用して、自分のデータベースに特殊文字を挿入するとき、私は唯一の???????文字を参照してください。SqlCommandでSQL Serverにキリル文字やその他の特殊文字を挿入する方法C#?

using (SqlCommand sqlCmd = new SqlCommand()) 
{ 
    sqlCmd.Connection = connection; 
    sqlCmd.CommandType = CommandType.Text; 

    sqlCmd.CommandText = "INSERT INTO dbo.Translations(TranslationKey,TranslationValue,FromLanguageKey,ToLanguageKey) VALUES (@TranslationKey, @TranslationValue, @FromLanguageKey, @ToLanguageKey)"; 

    sqlCmd.Parameters.AddWithValue("@TranslationKey", item.TranslationKey); 
    sqlCmd.Parameters.AddWithValue("@TranslationValue", item.TranslationValue); 
    sqlCmd.Parameters.AddWithValue("@FromLanguageKey", item.FromLanguageKey); 
    sqlCmd.Parameters.AddWithValue("@ToLanguageKey", item.ToLanguageKey); 

    try 
    { 
     connection.Open(); 
     sqlCmd.ExecuteNonQuery(); 
     connection.Close(); 
    } 
    catch (Exception ex) 
    { 
     connection.Close(); 
    } 
} 

いくつかのチュートリアルでは、使用N文を書いたが、私はそれはParameters.AddWithValueでどのように使用することができますか?

+0

[AddWithValue()を既に使用していますか?](http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithueue-already)をチェックしてください。 /)を使用して、 '.AddWithValue()'の使用を停止すると、予期せぬ驚くべき結果になる可能性があります。 –

答えて

3

まず、最も重要なことです。これは:

catch (Exception ex) 
{ 
    connection.Close(); 
} 

は非常に悪です。 すべてあなたが発生する可能性のあるエラーについてあなたが持っている情報を捨て去る。 エラーが発生した場合は、ログに記録してください。それらを捨てないでください。このようなコードは、デバッグを悪夢にさせるでしょう。あなたはおそらく書きたかったことだった。

try 
{ 
    connection.Open(); 
    sqlCmd.ExecuteNonQuery(); 
} 
finally 
{ 
    connection.Close(); 
} 

さらに良い:usingキーワードを使用します。


現在、マイナーな問題については、ローカリゼーション。あなたはコードが正しいです(上記の点を除いて)、あなたのデータ型はおそらくそうではありません。

あなたは[MCVE]を提供しなかったので、1だけで推測することができますが、最も可能性の高い原因は、あなたがnvarcharnvarchar(MAX)を使用している必要があるときあなたはvarchartext列を使用したことです。

+0

私はテキスト列を使用しました。 :S – tixovoxi

+0

@tixovoxi:代わりに 'nvarchar(MAX)'を使用してください。理由:(1) 'text'は単一のコードページだけをサポートし、' ntext'はUnicodeをサポートします(これはあなたが望むものです)。 (2) 'text'と' ntext'は廃止予定です。代わりに 'varchar(MAX)'と 'nvarchar(MAX)'を使用してください。 – Heinzi

+0

あなたのアドバイスとnvarcharのヒントをありがとうございました:)それは私の問題を解決しました。 – tixovoxi

関連する問題