0

この例外をスローすることで、なぜこのランタイムエラーが発生したのでしょうか。

SqlExceptionはユーザーコードによって処理されませんでした

'm'の近くの構文が正しくありません。
文字列')'の後の閉じられていない引用符。

以下のコードを使用してデータベースにレコードを追加したとき、実際には常にこのコードを使用していましたが、現在は機能していません。

このエラーの原因を理解していただければ幸いです。ありがとう...以下のコードがあります:

protected void Button1_Click(object sender, EventArgs e)
{
   string conn = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Coldwind.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
   SqlConnection connection = new SqlConnection(conn);
   // SqlDataReader dr = new SqlDataReader();

   connection.Open();
   string sql = "INSERT INTO [CommentTab]([Name],[Comments]) Values('" + TextBox1.Text + "','" + TextBox2.Text + "')";
   SqlCommand cmd = new SqlCommand(sql, connection);
   cmd.CommandType = CommandType.Text;

   cmd.ExecuteNonQuery();
   cmd.Dispose();
   connection.Close();
   Response.Redirect("~/Default5.aspx");
}
4

3 に答える 3

2

問題はあなたが挿入しているあなたのテキストにあると思います。投稿してもらえますか?また、代わりにストアドプロシージャを使用してパラメータを渡すことをお勧めします。

于 2013-03-24T12:59:35.797 に答える
2

問題は、ユーザーが入力した文字列を直接渡すことである可能性があります。たとえば、ユーザーが一重引用符で何かを入力すると、エラーが発生します。

インラインSQLを使用してユーザーが入力した文字列をデータベースに直接渡さないでください。SQLインジェクション攻撃に対して脆弱です。パラメータ化されたクエリを使用して、クエリを安全でエラーのないものにします。次のようにコードを修正できます。

//Your code
connection.Open();
string sql = "INSERT INTO [CommentTab]([Name],[Comments]) Values(@username,@comments)";
SqlCommand cmd = new SqlCommand(sql, connection);
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@username", TextBox1.Text);
cmd.Parameters.AddWithValue("@comments", TextBox2.Text);

cmd.ExecuteNonQuery();
cmd.Dispose();
connection.Close();
Response.Redirect("~/Default5.aspx");
于 2013-03-24T13:06:22.243 に答える
1

あなたの入力にはquotation mark("'")それ自体が含まれていると思います。したがって、このように二重引用符で置き換える方がよいでしょう。

string Val1 =TextBox1.Text.Replace("'","''");

次に、この値をクエリで使用します。

于 2013-03-24T13:03:34.597 に答える