我想将文件插入数据库,我的控制器中有这个代码:
public ActionResult Create(CertificationViewModel vm, HttpPostedFileBase file)
{
try
{
CertificationDetail ds = new CertificationDetail();
if(ModelState.IsValid)
{
ds.CertificationTypeId = vm.CertificationTypeId;
ds.StatusId = vm.StatusId;
ds.Result = vm.Result;
vm.FileName = file.FileName;
ds.pdf = new byte[file.ContentLength];
file.InputStream.Read(vm.pdf, 0, file.ContentLength);
}
return View(vm);
}
}
我在数据库中的文件是VarBinary(3600)
,模型中的文件是`byte []。
当我尝试在数据库中插入一些东西时,它变为空,它首先进入DAL以获得确认,然后是,它被插入到数据库中。
有人可以检测到我的代码中的任何错误吗?
答案 0 :(得分:2)
如果此代码与您的代码相同,并且您的CertificationDetail
类是您的数据库模型,则在调用InputStream.Read
时会出现逻辑错误。
从InputStream.Read
CertificationDetail
获取第一个参数:
缓冲 键入:System.Byte []
一个字节数组。当此方法返回时,缓冲区包含指定的字节数组,其值介于offset和(offset + count - 1)替换为从当前源读取的字节。
因此,基本上,您将覆盖ViewModel中的缓冲区数组,但不会覆盖InputStream.Read
类中的缓冲区数组。您需要将byte[]
的第一个参数设置为要将字节保存到的InputStream.Read
。
将file.InputStream.Read(ds.pdf, 0, file.ContentLength)
调用更改为以下内容:CertificationDetail
,如果Get-Process | Where-Object { $_.cpu -gt 10} | Format-Table -AutoSize -Property "ProcessName", "CPU", "Id"
是用于保存到数据库中的内容,则应将保存修复到数据库中。