2014-01-23 139 views
3

如果沒有撇號的任何值,這段代碼就能正常工作。但是,如果ddList.SelectedValue是比如婦女節,它顯示「不正確的語法附近's'。在字符串''後面的未引用的引號」。 我試過albumName.Replace,但目前爲止沒有運氣。無法刪除撇號

protected void btnUpload_Click(object sender, EventArgs e) 
{ 
    string albumName = ddList.SelectedValue.ToString(); 
    albumName.Replace("'", "''"); 

    conn.Open(); 
    SqlCommand command = new SqlCommand("select ID from Album where AlbumName = '" + albumName + "'", conn); 

    SqlDataReader reader = command.ExecuteReader(); 
    while (reader.Read()) 
    { 
     AlbmID = Int32.Parse((reader["ID"].ToString())); 

    } 
    reader.Close(); 

    if (fileuploadimages.HasFile == false) 
    { ScriptManager.RegisterStartupScript(Page, Page.GetType(), "key", "<script>alert('No File Uploaded.')</script>", false); } 
    else 
    { 
     //Get Filename from fileupload control 
     string filename = Path.GetFileName(fileuploadimages.PostedFile.FileName); 
     //Save images into SlideImages folder 
     fileuploadimages.SaveAs(Server.MapPath("Pictures/" + filename)); 
     //Open the database connection 

     //Query to insert images name and Description into database 
     SqlCommand cmd = new SqlCommand("Insert into Images(ImagePath,Album_ID,ImageDesc) values(@ImagePath,@Album_ID,@ImageDesc)", conn); 
     //Passing parameters to query 
     cmd.Parameters.AddWithValue("@ImagePath", filename); 
     cmd.Parameters.AddWithValue("@Album_ID", AlbmID); 
     cmd.Parameters.AddWithValue("@ImageDesc", txtDescription.Text); 
     cmd.ExecuteNonQuery(); 
     //Close dbconnection 
     conn.Close(); 
     txtDescription.Text = ""; 
     BindDataList(); 
    } 
} 
+6

您有SQL注入漏洞。你需要使用參數。 – SLaks

+0

我知道。這是這個問題的原因嗎? – user3229034

+4

它看起來像你已經知道如何使用參數(你的第二個查詢)。你爲什麼不(你的第一個問題)?這就是*完全*你將如何解決這個問題。目前你的第一個查詢是***執行用戶輸入作爲代碼***,這基本上允許任何用戶執行他們想要在你的數據庫中的任何代碼。 – David

回答

4
SqlCommand command = new SqlCommand("select ID from Album where AlbumName = @name", conn); 
command.Parameters.Add(new SqlParameter("@name", albumName)); 
. 
. 
. 

此外,你應該換連接,命令和讀者對象的using() {}構建及時處置資源。

無論何時將動態事件放入SQL字符串以避免類似的錯誤,以及SQL注入攻擊和其他漏洞,都可以使用這樣的參數。

此外,您可以快速替換執行多個查詢的參數,而無需重建字符串。

+0

謝謝:)它的工作 – user3229034

1
.Replace("'",@"\'") 

這將逃不出你的單引號/撇號