2014-01-23 2 views
3

Этот фрагмент кода работает правильно, если есть значение без апострофа. Но если ddList.SelectedValue, скажем, женский день, показывает «Некорректный синтаксис рядом с». Незакрытая кавычка после символьной строки «». Я попробовал 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("'",@"\'") 

Это избежит вашей кавычки/апострофа

Смежные вопросы