我有一个 ASP MVC 应用程序,它使用 HttpPostedFileBase 从 Razor 视图中获取上传的文件。这些被收集到模型中的列表中,然后传递到实体框架(v4.0.30319),我在其中调用存储过程将文件保存到数据库。
(我确信有更好的方法可以做到这一点,但我正在处理现有系统。)
在我的模型中:
public List<Attachment> Attachments { get; set; }
附件对象如下所示:
public class Attachment
{
public System.IO.Stream InputStream { get; set; }
public String FileName { get; set; }
public String ContentType { get; set; }
public Int32 ContentLength { get; set; }
}
当我保存附件时,我遍历列表并尝试调用存储的过程来保存输入流:
foreach(var file in ticket.Attachments)
{
if (file != null)
{
try
{
//create a byte array from the input file stream
byte[] myData = new byte[file.ContentLength];
file.InputStream.Read(myData, 0, file.ContentLength);
...
var uploadResult = Database.ExecuteSqlCommand("EXEC mySP @file = {0}...", myData);
问题似乎是存储过程需要一段文本
ALTER PROCEDURE [dbo].[mySP]
@file AS TEXT,
@tcFileExtension VARCHAR(50),
...
这导致了错误:
Operand type clash: varbinary is incompatible with text
转换字节数组(或InputStream)以便我可以通过存储过程保存它的最佳方法是什么?
上传的文件可以是任何东西:xls、xlsx、pdf、tiff、doc 等
干杯。