Получить LONGBLOB из MySQL в C # - PullRequest
2 голосов
/ 24 ноября 2011

Я хочу получить LONGBLOB из моей базы данных MySQL, но не знаю как.Я искал interwebz, и ничего действительно полезного (понятного) не было найдено.Когда я получаю LONGBLOB, я хочу сохранить его как изображение.

Это то, что я уже пробовал:

        int bufferSize = 100;
        byte[] bin = new byte[bufferSize];
        long retval = 0;
        long startIndex = 0;

        MemoryStream ms = null;
        Image image = null;

        MySqlCommand command = new MySqlCommand("select * from image where uid = @uid", Connection.Connect());
        command.Parameters.AddWithValue("@uid", "2");
        MySqlDataReader reader = command.ExecuteReader();

        if (reader.Read())
        {
            retval = reader.GetBytes(reader.GetOrdinal("logo"), startIndex, bin, 0, bufferSize);
        }


        ms = new MemoryStream(bin);
        image = Image.FromStream(ms);

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 24 ноября 2011

Я действительно сделал это как часть проекта, над которым я работал ...

public Bitmap loadImage(int imgID)
        {

            MySqlDataReader myData;
            MySqlCommand cmd = new MySqlCommand();

            string SQL;
            byte[] rawData;
            MemoryStream ms;
            UInt32 FileSize;
            Bitmap outImage;

            SQL = "SELECT ImageName, ImageSize, Image FROM Images WHERE ImageID =";
            SQL += imgID.ToString();

            try
            {
                cmd.Connection = connection;
                cmd.CommandText = SQL;

                myData = cmd.ExecuteReader();

                if (!myData.HasRows)
                    throw new Exception("There are no blobs to save");

                myData.Read();

                FileSize = myData.GetUInt32(myData.GetOrdinal("ImageSize"));
                rawData = new byte[FileSize];

                myData.GetBytes(myData.GetOrdinal("Image"), 0, rawData, 0, (Int32)FileSize);


                ms = new MemoryStream(rawData);
                outImage = new Bitmap(ms);
                ms.Close();
                ms.Dispose();

                myData.Close();
                myData.Dispose();

                cmd.Dispose();

                return outImage;


            }
            catch (MySqlException ex)
            {
                MessageBox.Show(ex.Message);
                return null;
            }

        }

Надеюсь, это поможет.Также прошу прощения за любые плохие практики кодирования, это было написано некоторое время назад.

Спасибо, Том

0 голосов
/ 24 ноября 2011

Я не уверен, но я думаю, вы можете попробовать это: http://www.techrepublic.com/article/utilize-adonet-and-c-to-work-with-blob-data/5766889

* 1004 Штефан *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...