2017-01-17 10 views
0

私はインターネット上でコードを見つけました。文書をデータベースにバイト配列として挿入しました。Dapperを使用してbyte []配列をsqldbtype.Varbinaryに変換します

これをDapper/Entityフレームワークに適用する必要がありますが、これまでのところ成功していません。次のように私はこれまで得たことである:ここ

 public void InsereRegistroEmail(string a, string b, string c, byte[] anexoBytes) 
    { 
     //var cn = _context.Database.Connection; 

     //cn.Execute(string.Format(QueriesSAC.InsereRegistroEmailBanco, motivoEmail, nomeGestor, corpoEmail, anexoBytes)); 

     var cn = _context.Database.Connection; 
     //var A = new SqlParameter("@A", SqlDbType.VarBinary, anexoBytes.Length); 
     //A.Value = anexoBytes; 

     var sql =(string.Format("INSERT INTO [LOG_EMAIL] ([GSTOR_DSTNA] ,[ASSNT],[DATA_ENVIO],[CORPO_EMAIL],[ANEXO]) VALUES('{0}','{1}', GETDATE(),'{2}', @A)", a, b, c)); 
     var A = new DynamicParameters(); 
     A.Add("@A", anexoBytes, dbType: DbType.Binary, direction: ParameterDirection.Input); 
     A.Get<DbType>("@A"); 
     cn.Execute(sql); 
    } 

キー行は次のとおりです。

  sqlWrite.Parameters.Add("@File", SqlDbType.VarBinary, file.Length).Value = file; 

VARBINARYへのデータ型を設定します1つであるので。私は本当にここでいくつかの助けが必要です...

ファイルの配列はanexoBytesです。

+0

Dapperに詳しくはありませんが、何らかの理由でパラメータを 'Execute'に渡す必要はありませんか? – Crowcoder

+0

@Crowcoder私は "SQL"変数がそれをすると信じています。 – Longshadow

+0

これは単なる文字列です。 [ここをクリック](https://github.com/StackExchange/dapper-dot-net#stored-procedures) – Crowcoder

答えて

1

Dapperはパラメータ値の代わりになる匿名型を使用して代入を処理できます。したがって、例では、SQLを変更してパラメータ化されたSQLを定義し、値を含む新しいオブジェクトを渡しますこれらのパラメータについては、これにより、自動的に値がパラメータにマップされ、SQLを手動で定義したり、文字列を置換する必要がなくなります。

_connection.Execute("INSERT INTO [LOG_EMAIL] ([GSTOR_DSTNA] ,[ASSNT],[DATA_ENVIO],[CORPO_EMAIL],[ANEXO]) VALUES(@DstNa, @Assnt, GETDATE(), @CorpEmail, @Anexo", 
      new { DstNa = a, Assnt = b, CorpEmail = c, Anexo = anexoBytes }); 
関連する問題