1

以下は、私のトリミングされた C# です。

thisConnection.Open();
string commandtext = "Insert into Table (Comments)values('@Comments')";
SqlCommand command = new SqlCommand(commandtext, thisConnection);
command.Parameters.Add("@Comments", SqlDbType.VarChar).Value = Comments;
command.ExecuteNonQuery();
thisConnection.Close();

データベースに入力する前に特定の特殊文字を取り除くことで、ほとんど何でも入力できます。変数に追加しようとしまし.Replace("'","''");Commentsが、これは何も変更しません。パラメータを使用すると、とにかくこれを防ぐことができます。

このような質問が多く寄せられていることは知っていますが、どこでも「パラメーターを使用してください!」と指摘するだけです。


編集: 4 人が同じことを言っているので、ここですべて返信します。前後の一重引用符を削除しました@Commentsが、問題はまったく同じです。一重引用符で囲まれた入力は、データベースにはまったく入力されません。

ここに来る前にJavaScriptを追加しまし.replace(/'/g,"''")たが、これは機能していますが、なぜそうしなければならないのかわかりません。

4

5 に答える 5

2

一重引用符は必要ありません。

command.CommandText = "Insert into Table (Comments)values(@Comments)";

わかりました、 のコメントの少し後に読んで、hvdこれが機能する方法は を実行することであることがわかりsp_executesqlました。

これを回避する方法は次のとおりです。

thisConnection.Open();
SqlCommand command = new SqlCommand(commandtext, thisConnection);
command.CommandText = "Insert into Table (Comments)values(@Comments)";
SqlParameter param  = new SqlParameter();
param.ParameterName = "@Comments";
param.Value         = Comments;
command.Parameters.Add(param);
command.ExecuteNonQuery();
thisConnection.Close();
于 2013-09-27T09:21:11.747 に答える
0

私はこのようなことを試しましたが、例外は発生しませんでしたが、SQL インジェクションに対して安全ではない可能性があります。

Comments.Replace("'", $"{(char)39}");
于 2019-09-09T19:55:06.367 に答える