我有一个ASP MVC应用程序,它使用HttpPostedFileBase从Razor视图中拾取上载的文件。这些被收集到模型中的List中,然后传递给实体框架(v4.0.30319),我在其中调用存储过程将文件保存到数据库。通过存储过程将上传的文件(InputStream)保存到SQL Server
(我敢肯定有这样做的更好的办法,但我处理与现有系统)
在这个模型中,我有:
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等
干杯。
欢呼声。文件类型可以是任何东西。我编辑了这个问题来反映这个问题 – GrahamJRoy
如果文件类型可以是任何东西,那么你的列的类型是错误的。 – scottm
我认为这是一个blob,而不是实际的文本 – GrahamJRoy