C# 从服务器删除文件

C# 从服务器删除文件,c#,sql,file-upload,delete-file,C#,Sql,File Upload,Delete File,我有一个应用程序,我用它作为文件上传器,在东西的后端有一个管理面板。我已经完成了它的大部分工作,但是我遇到了一堵墙,无法从服务器上删除物理文件。允许此类操作的权限是正确的 单击条目旁边的delete按钮,我将调用行的主ID,因此我可以从SQL调用存储的文件路径。以下是我的代码: DbConn dbConnx = new DbConn(); SQL = "SELECT filePath FROM database WHERE id='"+ primaryID +"'"; myReade

我有一个应用程序,我用它作为文件上传器,在东西的后端有一个管理面板。我已经完成了它的大部分工作,但是我遇到了一堵墙,无法从服务器上删除物理文件。允许此类操作的权限是正确的

单击条目旁边的delete按钮,我将调用行的主ID,因此我可以从SQL调用存储的文件路径。以下是我的代码:

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


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

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

myReader.Read();
返回一个布尔值,该值告诉您datareader是否位于有效行上

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

 myReader = dbConnx.createDataReader(SQL);
 if(myReader.Read())
 {
     string fn44 = Convert.ToString(myReader[0]);
      ....
 }
您的代码还有另一个问题,称为Sql注入。
在生成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操作都应使用该方法获取有效的文件名

给我们一个示例“url”或您从数据库获取的路径。警告:您的代码存在漏洞。我从未见过删除方法获取url。我一直认为你需要一个驱动器号或UNC路径。(C:\\or\\server\share)感谢您的帮助,primaryID实际上不是由用户设置的,而是在用户单击“删除”按钮时设置的。我使用命令参数和数据键来设置它的值。我可以很容易地改变它,尽管如此,谢谢你指出的风险!url实际上是在寻找服务器路径。我只是在我的代码中将它错误地称为URL,这是漫长的一天。它确实使用了对数据文件夹的C:\\reference。感谢您提供此信息。C#/asp.net不是我最擅长的语言。这在PHP中很容易处理,但这里要复杂一些。myReader是我创建用来存储数据的SqlDataReader。我没有意识到.Read()返回了布尔值,我必须在将来的项目中记住这一点。感谢您提供有关SQL注入的提示。用户没有权限指定primaryID值是什么,它实际上是我分配给每一行的数据键。单击delete按钮时,将创建primaryID变量,以便我可以调用数据库中的特定条目。对于我的delete函数,我已按上述方式进行了设置。我将不得不做更多的研究来了解SQL注入。谢谢你的帮助!!另一件事是
primaryID
变量。在单引号之间将其传递到sql命令中。这意味着一个字符串被传递到数据库,如果数据库字段不是字符串,您可能会得到错误的结果,甚至是错误。再次感谢您,除了参数化查询之外,我已经完成了工作,这是明天的工作。我接受了你的回答。