トップ回答者
SqlCommand.Parameters の使用時のNプレフィックスについて

質問
-
いつもお世話になっております。
SqlCommand.Parameters の使用時のNプレフィックスについて質問させていただきます。
VisualStudio2008 C# でプログラムを作成しています。
DBはSQLServer2008 R2です。
SQLServerにテーブルを作成し、NVarcharの列を作成しました。
そこに、値をインサートしたいのですが、現在以下のようにプログラムしています。
string strParametar = "森鷗外"; string commandText = "Insert Into testTable SET testColumn = @Param"; using (SqlConnection connection = new SqlConnection(connectionString)) { SqlCommand command = new SqlCommand(commandText, connection); command.SqlCommand.Parameters.Add("@Param", SqlDbType.NVarChar, 500); command.SqlCommand.Parameters["@Param"].Direction = ParameterDirection.Input; command.SqlCommand.Parameters["@Param"].Value = strParametar; try { connection.Open(); command.ExecuteNonQuery(); } catch (Exception ex) { } }
しかし、これでは"鷗"が文字化けしてしまいます。
Management Studio で、
Insert Into testTable SET testColumn = N'森鷗外'
と、Nプレフィックスをつけて実行すれば、問題なくインサートできます。
commandText = "Insert Into testTable SET testColumn = N'" + strParametar + "'"
としてしまえばよいのですが、出来ればSqlCommand.Parametersを使用し、名前付きパラメータを使用したいと考えております。
ちなみに
command.Parameters.AddWithValue("@Param", strParametar );
も試しましたがだめでした。
msdnから、見つけられていないのかもしれませんが、どなたかご教授いただきたく、
よろしくお願いいたします。
回答
すべての返信
-
trapemiya様
返信ありがとうございます。
プロファイラを使用できる環境でなかったため確認しておりませんでしたが、
使用できるようにして確認しました。
以下のようになっていました。
exec sp_executesql N'INSERT INTO testTable(testColumn) VALUES( @Param ) ', N'@Param varchar(500)', @Param='森?外'
@Paramに代入するところではNプレフィックスはついておりませんでしたが、
ここで既に文字化けしていることがおかしいということに気づきました。
ということは、ここの問題?
command.SqlCommand.Parameters["@Param"].Value = strParametar;
代入する文字列の文字コードをどうにかしないといけないということですね。
まず、その辺を調べてみたいと思います。
-
佐祐理様
返信ありがとうございました。
ご指摘の点、プロファイラを見ているときにまったく気づいておりませんでした。
こちらにコピーする際に、消してしまったのかと思い確認したところ、
やはり、varchar(500)となっていました。
どういうことかと、よくよくソースを読んでみたところ、
原因がわかりました。
じつは、投稿させていただいたソースは、一部省いているところがあるのですが、
原因はそこにあり、SqlDbType.NVarCharだったら、SqlDbType.VarCharにするというコードがありました。
そこの処理をやめたら、うまくいきました。
ありがとうございました。
trapemiya様もありがとうございました。
プロファイラを見ないで確認はありませんね。
横着してました。
よい勉強になりました。