我目前正在开发一个用asp.net和c#开发的网站。我目前面临一个小问题。我使用以下代码返回来自数据库的文件位置列表。
public List<FileDetails> GetFiles()
{
string userName = HttpContext.Current.User.Identity.Name;
string sqlQuery = @"SELECT FileName,
FileLocation
FROM File
WHERE UserName=@UserName";
List<FileDetails> FileDetailsList = new List<FileDetails>();
using (SqlConnection connection = new SqlConnection(Common.ConnectionString))
{
using (SqlCommand cmd = new SqlCommand(sqlQuery))
{
cmd.Parameters.AddWithValue("UserName", userName);
cmd.Connection = connection;
connection.Open();
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
FileDetails f = new FileDetails();
f.FileName = reader["FileName"].ToString();
f.FileLocation = reader["FileLocation"].ToString();
FileDetailsList.Add(f);
}
}
}
}
return FileDetailsList;
}
现在我需要将它们显示在不同页面上的gridview中。我使用以下代码来实现此目的
FileDetails info = new FileDetails();
if (info.GetFiles() != null)
{
List<string> filePaths = Directory.GetFiles(info.FileLocation).ToList(); //Error is at this line
List<FileDetails> files = new List<FileDetails>();
foreach (string filePath in filePaths)
{
string filename = Path.GetFileName(filePath);
files.Add(new FileDetails()
{
FileName = filename,
FileLocation = filePath
});
}
GridView1.DataSource = info.GetFiles();
GridView1.DataBind();
}
问题是我一直收到错误System.ArgumentNullException: Value cannot be null.
Parameter name: path
有谁知道我哪里出错了?
如果我做Directory.GetFiles(@"C:\Test\Files").ToList();
它的效果非常好。但客户端的要求是从数据库中获取文件位置路径。
提前感谢您的帮助
答案 0 :(得分:1)
假设: info是一个类。 info.GetFiles()返回数据库中的记录列表。 (顶部的代码)
info.FileLocation在哪一点上设置?
确实
var filelist = info.GetFiles();
foreach(var f in filelist)
{
List<string> filePaths = Directory.GetFiles(f.FileLocation).ToList();
...
}
答案 1 :(得分:1)
您正在尝试从info.GetFilelocation获取文件位置,并且您已经创建了FileDetails的新对象,因此现在将存在与此对象关联的值,因此所有值都将为null。因此,您需要为此对象分配一些值,而不是访问FileLocation.May可能是这样的
FileDetails info = new FileDetails();
List<FileDetails> list=info.GetFiles();
而不是
List<string> filePaths = Directory.GetFiles(list[0].FileLocation).ToList();
同样,您可以遍历列表
foreach(FileDetails f in list)
List<string> filePaths = Directory.GetFiles(f.FileLocation).ToList();