Job*_*kai 3 c# sql file-upload delete-file
我有一个应用程序,我用作文件上传器,后端有一个管理面板.我已经完成了大部分工作,但我遇到了无法从服务器上删除物理文件的墙.允许此类操作的权限是正确的.
在单击条目旁边的删除按钮时,我正在调用行的主ID,因此我可以从SQL调用存储的filePath.这是我的代码:
DbConn dbConnx = new DbConn();
SQL = "SELECT filePath FROM database WHERE id='"+ primaryID +"'";
myReader = dbConnx.createDataReader(SQL);
string fn44 = Convert.ToString(myReader.Read());
string url = fn44; //I know redundant
System.IO.File.Delete(url);
Run Code Online (Sandbox Code Playgroud)
我能够收集到的唯一信息就是"真实".我相信这是因为我试图将信息转换为字符串而不是那样.我如何获取存储在SQL中的值并将其与变量一起使用来执行删除?
任何帮助/资源将不胜感激.
我不知道myReader的数据类型,但假设它是某种类型的DataReader然后调用
myReader.Read();
Run Code Online (Sandbox Code Playgroud)
返回一个布尔值,告诉您datareader是否位于有效行上.
要获取阅读器所在记录的内容(假设前一个调用返回true),您需要编写
myReader = dbConnx.createDataReader(SQL);
if(myReader.Read())
{
string fn44 = Convert.ToString(myReader[0]);
....
}
Run Code Online (Sandbox Code Playgroud)
您的代码有另一个问题,称为Sql Injection.
在构建sql命令时,不应将字符串连接与用户输入一起使用.您使用这样的参数化查询
SQL = "SELECT filePath FROM database WHERE id=@p1";
using(SqlConnection con = new SqlConnection(......))
using(SqlCommand cmd = new SqlCommand(SQL, con))
{
con.Open();
cmd.Parameters.AddWithValue("@p1",primaryID);
using(SqlDataReader myReader = cmd.ExecuteReader())
{
.....
}
}
Run Code Online (Sandbox Code Playgroud)
YYY
修复了数据库中的读数后,现在需要检查数据库中FilePath字段中存储的字符串类型.请记住,网站上的每个文件IO操作都应使用Server.MapPath方法获取有效的文件名