HttpPostedFileBaseを使用してRazorビューからアップロードされたファイルを取得するASPMVCアプリケーションがあります。これらはモデル内のリストに収集され、エンティティフレームワーク(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など、何でもかまいません。
乾杯。