如果有人能帮助我解决这个问题,我将不胜感激。首先,我有一个类似的课程:
public class Blob
{
public int BlobID { get; set; }
public string BlobName { get; set; }
public string FileName { get; set; }
public string FileMimeType { get; set; }
public int FileSize { get; set; }
public byte[] FileContent{ get; set; }
public DateTime DateCreated { get; set; }
public int CreatedByProfileID { get; set; }
}
非常标准,它只是一个映射到具有完全相同字段名称的表的对象。 SQL Server中的表如下所示:
我的控制器添加并查看操作以读取和写入数据库。我可以使用下面的操作代码编写文件:
[HttpPost]
public ActionResult Add(HttpPostedFileBase file)
{
if (file != null && file.ContentLength > 0)
{
Database db = DatabaseFactory.CreateDatabase("dbconnstr");
byte[] fileContent = new byte[file.ContentLength];
file.InputStream.Read(fileContent, 0, file.ContentLength);
object[] paramaters =
{
file.FileName,
file.FileName,
file.ContentType,
file.ContentLength,
fileContent,
DateTime.Now,
12518
};
db.ExecuteNonQuery("sp_Blob_Insert", paramaters);
}
return RedirectToAction("Index");
}
但是当我使用下面的View动作代码将文件读出到浏览器时,FileContent字段始终为null:
public ActionResult View(int id)
{
Database db = DatabaseFactory.CreateDatabase("dbconnstr");
Blob blob = db.ExecuteSprocAccessor<Blob>("sp_Blob_SelectByPkValue", id).Single();
return File(blob.FileContent, blob.FileMimeType, blob.FileName);
}
但是,如果我专门映射字段名称,它可以工作:
public ActionResult View(int id)
{
Database db = DatabaseFactory.CreateDatabase("dbconnstr");
IRowMapper<Blob> mapper = MapBuilder<Blob>.MapAllProperties().MapByName(x => x.FileContent).Build();
Blob blob = db.ExecuteSprocAccessor<Blob>("sp_Blob_SelectByPkValue", mapper, id).Single();
return File(blob.FileContent, blob.FileMimeType, blob.FileName);
}
这是ExecuteSprocAccessor()函数的错误吗?我做错了吗?
感谢您的提前时间。
答案 0 :(得分:0)
您可以使用以下代码:
.Map(x => x.FileContent).WithFunc(ConvertVarBinaryToByteArray);
然后创建这样的函数:
private static byte[] ConvertVarBinaryToByteArray(IDataRecord dataRecord)
{
return (byte[]) dataRecord.GetValue(dataRecord.GetOrdinal("FileContent"));
}
答案 1 :(得分:0)
我用这种方式解决了问题:
在执行ExecuteSprocAccessor:
之前添加此代码IRowMapper<FileEmail> rowMapper = MapBuilder<FileEmail>.MapAllProperties()
.Map(x => x.MyFile)
.WithFunc(ConvertVarBinaryToByteArray).Build();
创建Russ如上所述的方法:
private static byte[] ConvertVarBinaryToByteArray(IDataRecord dataRecord)
{
return (byte[])dataRecord.GetValue(dataRecord.GetOrdinal("FileContent"));
}