2016-09-06 1 views
1

私のプロジェクトではDapper.NETをORMレイヤーとして使用しています。私はファイルのアップロードとダウンロードのためにWebApisを書こうとしています。しかし、私はそれを働かせることができません。私はすでに助けを探すのに十分な検索をしましたが、何も見つかりませんでした。Dapper.NETを使用してSQLファイルテーブルにファイルストリームを挿入できません

単純にADO.NETを使用していた場合、ファイルストリームにVarBinary型のSqlParameterを使用できました。しかしDapper.NETのクエリパラメータは単に動的オブジェクトです。したがって、次のコードではレコードをファイルテーブルに挿入できません。

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 のメンバーファイルストリームは、パラメータ値

として使用することができません

誰でもこれをやったことがありますか、私が使用できるダッパー拡張プラグインを認識していますか?

答えて

2

DynamicParametersクラスを使用し、パラメータのデータ型を指定する必要があります。 私は

  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

おかげでたくさんのハイメ・ストリームVARBINARY(MAX)と呼ばれる列を持つテーブルTESTを作成たとえば、それは私のためにDynamicParametersと完璧に取り組んでいます。私はこの情報を見つけるのがなぜそんなに難しいのだろうと思っています。この質問と回答が他の人に役立つことを願っています。 – Rajiv

関連する問題