如果没有撇号的任何值,这段代码可以正常工作。但是,如果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();
}
}
答案 0 :(得分:4)
SqlCommand command = new SqlCommand("select ID from Album where AlbumName = @name", conn);
command.Parameters.Add(new SqlParameter("@name", albumName));
.
.
.
此外,您应该在using() {}
构造中包装连接,命令和读取器对象,以便及时处理资源。
只要将动态内容放入SQL字符串中,就可以使用这样的参数来避免这样的错误,以及SQL注入攻击和其他漏洞。
此外,您可以快速替换执行多个查询的参数,而无需重建字符串。
答案 1 :(得分:1)
.Replace("'",@"\'")
这将逃脱您的单引号/撇号