从服务器删除文件

时间:2013-11-19 20:11:30

标签: 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);

我能够收集的是,唯一被提取的信息是“真实的”。我相信这是因为我试图将信息转换为字符串而不是那样。我如何获取存储在SQL中的值并将其与变量一起使用来执行删除?

非常感谢任何帮助/资源。

1 个答案:

答案 0 :(得分:5)

我不知道myReader的数据类型,但假设它是某种类型的DataReader,那么调用

myReader.Read();

返回一个布尔值,告诉您datareader是否位于有效行上。

要获取阅读器所在记录的内容(假设前一个调用返回true),您需要编写

 myReader = dbConnx.createDataReader(SQL);
 if(myReader.Read())
 {
     string fn44 = Convert.ToString(myReader[0]);
      ....
 }

您的代码还有一个名为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())
     {
        .....
     }
 }

YYY

修复了数据库中的读数后,现在需要检查数据库中FilePath字段中存储的字符串类型。请记住,网站上的每个文件IO操作都应使用Server.MapPath方法

获取有效的文件名