2017-11-14 5 views
-2

私は、完全なmailmessageオブジェクトをデータベースに保存する必要があるという要件があります。以下のコードを使用して、メッセージボディと単一の添付ファイルをデータベースに保存できますが、このような状況をどのように処理するかについては、電子メールにn個の添付ファイルを持つことができます。複数の添付ファイルを含むMailMessageをSql Serverデータベースに保存する方法

private static void SaveMessage(MailMessage message, byte[] arr) 
{ 
    using (var conn = new SqlConnection("CONNECTION_STRING")) 
    { 
     using (var cmd = new SqlCommand("INSERT INTO MailSent (Body,Attachment) VALUES(@BODY,@ATTACHMENT)", conn)) 
     { 
      conn.Open(); 
      var param = new SqlParameter("@BODY", SqlDbType.VarChar) 
      { 
       Value = message.Body 
      }; 
      var param2 = new SqlParameter("@ATTACHMENT", SqlDbType.Binary) 
      { 
       Value = arr 
      }; 
      cmd.Parameters.Add(param); 
      cmd.Parameters.Add(param2); 
      cmd.ExecuteNonQuery(); 
     } 
    }    
} 

我々は、我々はあなたのDB内のファイルストリーム/ファイルを格納、経験則としてすべての情報

+0

確かに、[たくさんの仕事で](https://stackoverflow.com/q/1122058/41379160)。このためにデータベースを使うのではなく、[ファイルドロップ](https://stackoverflow.com/q/1264672/41379160)を設定するほうが良いでしょうが、もし必要ならば、あなたは ' FILESTREAM'に入札してください。 –

+0

ありがとうございました。試してみます。 –

+0

申し訳ありませんキキオカですが、私は完全なコードではなくアドバイスを探していました。私はそれを達成するための手がかりがなかったので。 –

答えて

0

を自分の添付ファイルと一緒に完全にはMailMessageをserilizeし、再度deserlizeとretriveことができます任意のソリューションをされて持つことができますデザインの選択肢が悪いと考えられた。主に、ファイルをファイルサーバーに保存して、Db内のファイルにURLを保存することをお勧めします。

ただし、必要な場合は、本体が親テーブルである別のテーブルに添付ファイルを配置する必要があります。

これにより、x個の添付ファイルをDB上の1行の電子メール本文にリンクすることができます(添付ファイル表の外部キーが必要です)。

次に、本体を最初に挿入し、forループの後のすべての添付ファイルを本体のIDとともに挿入します。

これが機能したら、そこで最適化します。

関連する問題