C# 无法删除撇号
如果有任何不带撇号的值,这段代码将正常工作。但是,如果ddList.SelectedValue是,比如说,妇女节,它会显示“s附近的语法不正确”。字符串“”后面有未闭合的引号 我试过专辑名。替换,但到目前为止运气不好C# 无法删除撇号,c#,asp.net,C#,Asp.net,如果有任何不带撇号的值,这段代码将正常工作。但是,如果ddList.SelectedValue是,比如说,妇女节,它会显示“s附近的语法不正确”。字符串“”后面有未闭合的引号 我试过专辑名。替换,但到目前为止运气不好 protected void btnUpload_Click(object sender, EventArgs e) { string albumName = ddList.SelectedValue.ToString(); 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();
}
}
protectedvoidbtnupload\u单击(对象发送方,事件参数e)
{
字符串albumName=ddList.SelectedValue.ToString();
相册名称。替换(“,”);
conn.Open();
SqlCommand=newSQLCommand(“从相册中选择ID,其中AlbumName='”+AlbumName+'”,conn);
SqlDataReader=command.ExecuteReader();
while(reader.Read())
{
AlbmID=Int32.Parse((reader[“ID”].ToString());
}
reader.Close();
if(fileuploadimages.HasFile==false)
{ScriptManager.RegisterStartupScript(Page,Page.GetType(),“key”,“alert('没有上载文件')”,false);}
其他的
{
//从fileupload控件获取文件名
string filename=Path.GetFileName(fileuploadimages.PostedFile.filename);
//将图像保存到SlideImage文件夹中
fileuploadimages.SaveAs(Server.MapPath(“Pictures/”+filename));
//打开数据库连接
//将图像名称和描述插入数据库的查询
SqlCommand cmd=new-SqlCommand(“插入到图像(ImagePath,相册ID,ImageDesc)值(@ImagePath,@Album\u ID,@ImageDesc)”,conn);
//向查询传递参数
cmd.Parameters.AddWithValue(“@ImagePath”,文件名);
cmd.Parameters.AddWithValue(“@Album_ID”,AlbmID);
cmd.Parameters.AddWithValue(“@ImageDesc”,txtDescription.Text);
cmd.ExecuteNonQuery();
//关闭数据库连接
康涅狄格州关闭();
txtDescription.Text=“”;
BindDataList();
}
}
此外,您应该使用(){}构造将连接、命令和读取器对象包装在中,以便及时处理资源
在将动态内容放入SQL字符串时使用类似的参数,以避免此类错误、SQL注入攻击和其他漏洞
此外,您可以快速替换用于执行多个查询的参数,而无需重新生成字符串
.Replace("'",@"\'")
这将避开您的单引号/撇号您有一个SQL注入漏洞。你需要使用参数,我知道。这就是问题的原因吗?看起来您已经知道如何使用参数(第二个查询)。你为什么不(你的第一个问题)?这正是你要解决的问题。当前,您的第一个查询是以代码形式执行用户输入,这基本上允许任何用户在您的数据库中执行他们想要的任何代码。@David让我试试。@user3229034是的,这将解决这个问题,因为将参数值设置为您的albumName
将确保字符串被转义。我真诚地希望这个代码不是在你的代码后面的一页。
.Replace("'",@"\'")