2016-09-06 42 views
1

我在項目中使用Dapper.NET作爲ORM層。我正在嘗試編寫WebApis進行文件上傳和下載。但是我無法讓它工作。我已經足夠搜尋尋找幫助,但我找不到任何幫助。無法使用Dapper.NET將文件流插入到SQL文件表中

如果我只是使用ADO.NET,我可以使用類型VarBinary的SqlParameter作爲文件流。但Dapper.NET查詢參數只是動態對象。所以下面的代碼無法將記錄插入到filetable中。

var fileStream = await Request.Content.ReadAsStreamAsync(); 

var streamId = Guid.NewGuid(); 
var fileName = streamId.ToString(); 

var sql = @"Insert into Attachments(stream_id, file_stream, name) 
      Values(@streamId, @fileStream, @fileName)"; 

using (var db = new SqlConnection(AppConfig.ConnectionString)) 
{ 
    await db.ExecuteAsync(sql, new { streamId, fileStream, fileName); 
} 

fileStream.Close(); 

拋出異常:的 'System.NotSupportedException' 在mscorlib.dll

其他信息:類型System.IO.Stream 的構件FILESTREAM不能被用作參數值

有沒有人這樣做或意識到我可以使用任何精簡擴展插件?

回答

2

您需要使用DynamicParameters類並指定參數的數據類型。 對於這個例子,我創建一個表測試是否可以稱爲物流VARBINARY(MAX)列

  using (var connection = new SqlConnection(Properties.Settings.Default.connectionString)) 
      { 
       connection.Open(); 
       using (var fs = File.Open(Properties.Settings.Default.filePath, FileMode.Open)) 
       { 
        var sql = "INSERT INTO TEST (Stream) VALUES (@fs)"; 

        var dParams = new DynamicParameters(); 
        dParams.Add("@fs", fs, DbType.Binary); 

        connection.Execute(sql, dParams); 
       } 
      } 
+0

非常感謝海梅,它與DynamicParameters工作對我來說非常完美。我只是想知道爲什麼我很難找到這些信息。我希望這個問題和答案可以幫助其他人。 – Rajiv