我正在開發一個評論部分頁面,我使用了文本框,按鈕和一個gridview控件來插入註釋並分別顯示它們。我在gridview外部添加了一個用於添加註釋的文本框,同時我還在gridview中添加了另一個文本框來添加對每個註釋的回覆。我分別在gridview控件中顯示了所有的評論和回覆。我注意到,如果我進入從使用下面在asp.net中處理Gridview控件中的文本框?
string comment = Server.HtmlEncode(TextBox2.Text.Replace("'", "''"));
comment = Server.HtmlEncode(comment.Replace("\r\n", "<br/>"));
connection.Open();
string sql = "INSERT INTO [ComTab]([Name],[Comments]) Values('" + commentor + "','" + comment + "')";
SqlCommand cmd = new SqlCommand(sql, connection);
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
cmd.Dispose();
connection.Close();
這句法位於GridView控件外的文本框意見,我可以保存此行< BR/> < BR/>有我的評語成沿着我數據庫如果你正在做一個多段評論。所以沒有問題,這就是我想要的。 現在相反,如果我輸入回覆到位於GridView控件內部使用下面
Button btn2 = (Button)sender;
GridViewRow row = (GridViewRow)btn2.NamingContainer;
TextBox gridtxt2 = row.FindControl("TextBox4") as TextBox;
string reply = Server.HtmlEncode(TextBox3.Text.Replace("'", "''"));
reply = Server.HtmlEncode(reply.Replace("\r\n", "<br/>"));
connection.Open();
string sql = "INSERT INTO [RepTab]([Name],[Replies]) Values('" + commentor + "','" + reply + "')";
SqlCommand cmd = new SqlCommand(sql, connection);
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
cmd.Dispose();
connection.Close();
以下代碼文本框無法保存這一行了< BR/> < BR/>以及我的回覆到我的數據庫,這就是爲什麼如果用戶輸入多段回覆,它不會顯示多段回覆,而是它被壓縮成一個長段。那麼我怎麼能夠保存這條線< br/> < br/>隨着我的回覆到我的數據庫?有什麼建議麼?謝謝...
Sql注入檢測:)我希望有人會添加回復');丟表用戶; - – 2014-09-01 12:01:56
你有什麼建議?你什麼意思? – timmack 2014-09-01 12:03:13
Ondrej說的是,如果你使用字符串連接來創建一個SQL字符串,並且你發送到數據庫,那麼你很容易被某人添加一個額外的SQL命令給你試圖執行的命令。這意味着有人可能會放棄您的數據庫,因爲權限並未阻止他。更好的方法是在你的查詢中使用SQL參數,它可以防止SQL注入。所以你可以稱它爲sql =「insert into x(a,b)values(@paramA,@paramB)」。然後在下面你會調用cmd.Parameters.AddWithValue(「@ paramA」,textbox1.Value)等希望清除它。 – 2014-09-01 12:07:09