2014-03-30 18 views
-4
string sql = "insert into tblmain values('" + txtName.Text + "','" + txtPost.Text + "','" + DropDownList1.SelectedItem + "')"; 

如果用戶插入的txtPost My name's first later is D !,那麼它給出錯誤' s爲不允許的。 可否請您給我的代碼,以接受來自文本此類字符的.NET(C#)。我如何可以插入文本框從焦炭特殊到SQL表(特殊字符,如「S「,或類似♥♫)..?

+6

使用[參數化查詢](http://blog.codinghorror.com/give-me-parameterized-sql-or-give-me-death/)而不是字符串連接。您的代碼對[SQL Injection](http://en.wikipedia.org/wiki/SQL_injection)攻擊開放。 –

+0

As @SonerGönül表示您正在使您的網站容易受到SQL注入攻擊。改用'SqlCommand'。你可以使用'「插入tblmain值(?,?,?)」。然後使用'SqlCommand.Parameters.Add'。 – Nilesh

回答

1

你的樣品是SQL injection在最純粹的形式書中的例子。'關閉之前的報價和SQL命令的其餘部分的解釋與你期望的不同。

There不是在直接處理非硬編碼值和SqlConnection時不使用parametrized queries的藉口。

另請查看這些articles瞭解更多細節。近似樣品(需要的字段,並沒有表現出異常處理):

using (SqlConnection connection = new SqlConnection(connectionString)) 
{ 
    SqlCommand command = new SqlCommand("insert into tblmain values(@name")", connection); 
    command.Parameters.Add("@name", SqlDbType.String); 
    command.Parameters["@name"].Value = customerID; 
    connection.Open(); 
    Int32 rowsAffected = command.ExecuteNonQuery(); 
    Console.WriteLine("RowsAffected: {0}", rowsAffected); 
} 

你可能會碰到的第二個問題是,如果你挑錯字段類型的文本 - 要能夠存儲你想你需要的Unicode字符串中的字符。查看C#: DbType.String versus DbType.AnsiString的帖子瞭解詳情。