我有一个应用程序,我用作文件上传器,后端有一个管理面板。我已经完成了大部分工作,但我遇到了无法从服务器删除物理文件的墙。允许此类操作的权限是正确的。
单击条目旁边的删除按钮,我正在调用行的主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中的值并将其与变量一起使用来执行删除?
非常感谢任何帮助/资源。
答案 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方法
获取有效的文件名