сохранение вложений электронной почты в двоичном виде в базу данных с помощью c # - PullRequest
1 голос
/ 04 августа 2011

Я могу получить вложения электронной почты с сервера Exchange 2003 (MAPI.Attachment).Как я могу сохранить файл вложения PDF в виде двоичного файла в базе данных?

Вот код, который лучше понять.В целях тестирования я сохраняю файл PDF вложения в файловую систему.Как я могу сохранить это в базе данных?Или как я могу преобразовать это в байтовый массив?Кроме того, как я могу получить размер файла, поскольку мне нужно это, когда я объявляю массив байтов "fileData" ...

byte[] fileData = new byte[10000];
                string[] fileTokens = new string[2];
                string[] result = new string[3];
                message.Unread = false;
                emailSubject = message.Subject.ToString();
                emailBody = message.Text.ToString();
                MAPI.Attachments test = null;
                test = (MAPI.Attachments)message.Attachments;
                int attachmentCount = (int)test.Count;
                for (int loopCounter = 1; loopCounter <= attachmentCount; loopCounter++)
                {
                    MAPI.Attachment test2 = (MAPI.Attachment)test.get_Item(loopCounter);
                    bool temp = (test2.Name.ToString().Contains(".pdf") && test2.Name.ToString().IndexOf('Q') == 0);
                    if (test2.Name.ToString().Contains(".pdf") && test2.Name.ToString().IndexOf('Q') == 0)
                    {
                        //test2.ReadFromFile(fileData);
                        test2.WriteToFile("d:\\data\\" + test2.Name);
                        PDFParser pdfParser = new PDFParser();
                        pdfParser.ReadPdfFile("d:\\data\\" + test2.Name, result);
                        sentTime = (DateTime)message.TimeSent;
                        string fileName = (string)test2.Name;
                        fileTokens = fileName.Split('.');
                    }
                    RequestHistorySet historySet = new RequestHistorySet(1, sentTime, fileData, fileTokens[1]);
                    bool res = historySet.Update();

                    message.Unread = false;
                    message.Update();

А вот функция обновления из historySet Class

public bool Update()
{
    using (SqlConnection mySqlConnection = ...))
    {
        // Set up the Command object
        SqlCommand myCommand = new SqlCommand("CONNECTION STRING..", mySqlConnection);


        // Set up the OriginalName parameter
        SqlParameter prmId = new SqlParameter("@id", SqlDbType.Int);
        prmId.Value = id;
        myCommand.Parameters.Add(prmId);

        SqlParameter prmRequsetDate = new SqlParameter("@requestDate", SqlDbType.DateTime);
        prmRequsetDate.Value = requestDate;
        myCommand.Parameters.Add(prmRequsetDate);

        // Set up the FileData parameter
        SqlParameter prmFileData = new SqlParameter("@uplodedQuote_File ", SqlDbType.VarBinary);
        prmFileData.Value = fileData;
        prmFileData.Size = fileData.Length;
        myCommand.Parameters.Add(prmFileData);


        SqlParameter prmFileExtension = new SqlParameter("@uplodedQuote_Ext", SqlDbType.NVarChar);
        prmFileExtension.Value = fileExtension;
        myCommand.Parameters.Add(prmFileExtension);

        // Execute the command, and clean up.
        mySqlConnection.Open();
        bool result = myCommand.ExecuteNonQuery() > 0;
        mySqlConnection.Close();

        return result;
    }
}

1 Ответ

0 голосов
/ 05 августа 2011

На данный момент это то, что я сделал. Я сохраняю его в файловой системе, а затем читаю оттуда.

test2.WriteToFile("d:\\data\\" + test2.Name);
fileData = FileToByteArray("d:\\data\\" + test2.Name);
PDFParser pdfParser = new PDFParser();
pdfParser.ReadPdfFile("d:\\data\\" + test2.Name, result);
TryToDelete("d:\\data\\" + test2.Name);
sentTime = (DateTime)message.TimeSent;
string fileName = (string)test2.Name;
fileTokens = fileName.Split('.');
historySet = new RequestHistorySet(1, sentTime, fileData, fileTokens[1]);
...