2013-03-24 34 views
0

我不知道爲什麼我拋出此異常得到這個運行時錯誤:保存記錄到數據庫中拋出運行時錯誤在ASP.Net C#

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"); 
} 
+0

執行此方法時,實際上包含您的sql字符串的是什麼?附:使用sql參數而不是字符串連接。 – 2013-03-24 12:59:37

+0

你可以發佈你在textbox1和textbox2中輸入的內容嗎?看起來像一個解析問題。 – 2013-03-24 13:07:27

回答

1

我認爲您的輸入包含quotation mark("'")本身。所以最好還是用雙 引號這樣

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

替換它們,然後在查詢中使用此值。

+0

謝謝你們我應該使用參數化的存儲專業版。@ Sachin,謝謝你讓我的一天你的代碼適合我。現在我意識到用單引號輸入字符串會毀掉我的代碼。再次感謝 – timmack 2013-03-24 13:29:02

+0

太棒了!我的解決方案已爲您工作,但是@timmack您應該使用參數化的SQL來避免Sql注入。謝謝 – Sachin 2013-03-24 13:34:43

2

我認爲這個問題是在你插入的文本中。你可以發佈嗎? 此外,我建議使用存儲過程並傳遞參數。

+0

我的一個文本框設置爲多行模式。這很重要嗎? – timmack 2013-03-24 13:05:31

+0

nope它不 – 2013-03-24 13:06:24

+0

請調試你的代碼,看看你建立了什麼實際的字符串。如果您在此之後無法弄清楚,請使用完整字符串更新您的文章。 – evgenyl 2013-03-24 13:07:45

2

您的問題可能是因爲您直接傳遞用戶鍵入的字符串。例如,如果用戶使用單引號鍵入某些內容,則會產生錯誤。

請避免直接將帶有inline 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"); 
相關問題