Проблемы с использованием OleDbConnection для экспорта изображения в документ Excel в С#

Я хочу экспортировать изображение в документ excel в С#

Изображение следующих форматов: System.Windows.Media.Imaging.BitmapImage

Это детали подключения:

private const string OleDbConnection = "provider=Microsoft.Jet.OLEDB.4.0;Data Source='{0}';Extended Properties=Excel 8.0;";
private const string OleDbInsert = "INSERT INTO [Report] ([Time], [Elapsed], [Description], [Picture]) values( @timestamp, @elapsed, @description, @pic);";
private const string OleDbCreate = "CREATE TABLE [Report] ([Time] varchar(255), [Elapsed] varchar(255), [Description] varchar(255), [pic] blob);";

Я использую следующий код для записи изображения в Excel:

foreach (var e in Entries)
{

using(var command = new OleDbCommand { Connection = connection, CommandText = OleDbInsert })
{

    command.Parameters.Add(new OleDbParameter("@component", OleDbType.BSTR) { Value = e.val1 });
    command.Parameters.Add(new OleDbParameter("@result", OleDbType.BSTR) { Value = e.val2 });
    command.Parameters.Add(new OleDbParameter("@description", OleDbType.BSTR) { Value = e.val3});

    if (e.EncodedScreenshot != string.Empty)
                        {
                            byte[] imageContent = imageToByteArray(ImageWpfToGDI(e.Picture));
                            OleDbParameter ph = new OleDbParameter("@pic", OleDbType.Binary) { Value = imageContent}; 
                            ph.Size = imageContent.Length;
                            command.Parameters.Add(ph);
                        }
}

Вот методы, которые я использую:

    public byte[] imageToByteArray(Image imageIn)
    {
        MemoryStream ms = new MemoryStream();
        imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
        return ms.ToArray();
    }

    private System.Drawing.Image ImageWpfToGDI(System.Windows.Media.Imaging.BitmapImage image)
    {
        MemoryStream ms = new MemoryStream();
        var encoder = new System.Windows.Media.Imaging.BmpBitmapEncoder();
        encoder.Frames.Add(System.Windows.Media.Imaging.BitmapFrame.Create(image as System.Windows.Media.Imaging.BitmapSource));
        encoder.Save(ms);
        ms.Flush();
        return System.Drawing.Image.FromStream(ms);
    }

Все данные экспортируются в файл Excel, кроме изображения (а оно точно существует). Не могли бы вы дать мне несколько советов, как это исправить? Я много искал в Интернете, но я все еще не могу найти решение.

Я внес некоторые изменения по этой ссылке: Вставка и извлечение изображения в БД Access 2007 из приложения C#. Я считаю, что моя ошибка связана с типами данных изображения. Какой тип данных я должен использовать для изображения в БД и OleDbParameter?

Может ли кто-нибудь помочь мне, пожалуйста? Буду благодарен за любой ответ.

Большое спасибо! :)


person MTA    schedule 18.03.2013    source источник


Ответы (1)


На всякий случай кто-то наткнется на ту же проблему ..

Я не смог найти способ экспортировать изображения в файл excel с помощью OleDbParameter. Если кто-то знает, как это сделать, пожалуйста, поправьте меня.

Вместо этого я использовал следующий подход: http://csharp.net-informations.com/excel/csharp-insert-picture-excel.htm С помощью этой справки: Как вставить изображение в Excel из приложения C#? И это прекрасно работает.

person MTA    schedule 21.03.2013