gpt4 book ai didi

c# - 通过存储过程将上传的文件(InputStream)保存到SQL Server

转载 作者:太空宇宙 更新时间:2023-11-03 16:30:52 24 4
gpt4 key购买 nike

我有一个 ASP MVC 应用程序,它使用 HttpPostedFileBase 从 Razor View 中获取上传的文件。这些被收集到模型中的列表中,然后传递到 Entity Framework (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等

干杯。

最佳答案

如果您确定数据是文本,您可以使用 Encoding.GetString非常简单地将所有文本读入一个字符串,然后将其传递给您的存储过程。

var uploadResult = Database.ExecuteSqlCommand("EXEC mySP @file = {0}...", Encoding.GetString(myData);

关于c# - 通过存储过程将上传的文件(InputStream)保存到SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10801972/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com