2013-06-24 97 views
1

我有這樣的代碼,可以讓你在文本框輸入的句子,並將其插入表中的SQL Server中如何允許從C#文本框在SQL空間文本

using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString)) 
{ 
    con.Open(); 
    SqlCommand com = new SqlCommand("Insert Into tbl_notes (Notes,date_time) Values('" + txtbox_Notes.Text + "','" + DateTime.Now + "')", con); 
    com.ExecuteNonQuery(); 
    txtbox_Notes.Text = ""; 
} 

但是當我按下按鈕調用此功能,它提供了錯誤

字符串或二進制數據將被截斷

+4

你應該使用參數化查詢工作。 –

+0

您的SQL列未設置爲接受您嘗試插入的'note'的長度。要麼更改列長度,要麼截斷文本。 –

回答

4

的錯誤表示字符串的長度你想插入在Notes列中,長於該列定義中允許的最大大小。嘗試將txtbox_Notes.Text的值截斷爲指定的列長度。

我也建議你閱讀一下SQL Injection,並考慮到你執行這個插入命令的方式是真的是容易受到這種攻擊。正如對該問題的評論中所建議的那樣,您還可以使用存儲過程來執行插入操作,該插入不僅提供了(薄)安全層,還使您的代碼更具可讀性。

+0

如果我使用存儲過程,它會從SQL注入安全嗎? – user1954418

+2

絕對比字符串連接更安全。 –

0

您需要在您的查詢中使用參數,否則您會使其非常容易出錯,並且對SQL注入也很容易。

只是嘗試這樣的事情,看看它是否適合你

using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString)) 
    { 
     con.Open(); 
     SqlCommand com = new SqlCommand("Insert Into tbl_notes (Notes,date_time) Values(@Notes,@DateTime)", con); 
     com.Parameters.Add(new SqlParameter("@Notes", txtbox_Notes.Text)); 
     com.Parameters.Add(new SqlParameter("@DateTime", DateTime.Now)); 
     com.ExecuteNonQuery(); 
     txtbox_Notes.Text = ""; 
    }