从服务器删除文件

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中的值并将其与变量一起使用来执行删除?

任何帮助/资源将不胜感激.

Ste*_*eve 5

我不知道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方法获取有效的文件名