我有一個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