c # - чтение BLOB-объектов из SQL Server и отображение в графическом окне - PullRequest
1 голос
/ 11 марта 2012

я видел этот сайт Чтение / запись больших двоичных объектов с / на SQL Server с использованием C # .NET
После того, как он читает большой двоичный объект из базы данных, он сохраняет изображение в FileSystem.
IЯ хотел бы изменить его.
Вместо того, чтобы сохранять изображение в файловую систему, я хотел бы отобразить его на pictureBox

. Вот некоторые из его кодов при чтении BLOB

// **** Read BLOB from the Database and save it on the Filesystem
    public void GetEmployee(string plastName,string pfirstName)
    {
        SqlCommand getEmp = new SqlCommand(
            "SELECT EmployeeID, Photo "+
            "FROM Employees "+
            "WHERE LastName = @lastName "+
            "AND FirstName = @firstName", _conn);

        getEmp.Parameters.Add("@LastName",  SqlDbType.NVarChar, 20).Value = plastName;
        getEmp.Parameters.Add("@FirstName", SqlDbType.NVarChar, 10).Value = pfirstName;

        FileStream fs;                          // Writes the BLOB to a file (*.bmp).
        BinaryWriter bw;                        // Streams the BLOB to the FileStream object.
        int bufferSize = 100;                   // Size of the BLOB buffer.
        byte[] outbyte = new byte[bufferSize];  // The BLOB byte[] buffer to be filled by GetBytes.
        long retval;                            // The bytes returned from GetBytes.
        long startIndex = 0;                    // The starting position in the BLOB output.
        string emp_id = "";                     // The employee id to use in the file name.

        // Open the connection and read data into the DataReader.
        _conn.Open();
        SqlDataReader myReader = getEmp.ExecuteReader(CommandBehavior.SequentialAccess);

        while (myReader.Read())
        {
            // Get the employee id, which must occur before getting the employee.
            emp_id = myReader.GetInt32(0).ToString();

            // Create a file to hold the output.
            fs = new FileStream("employee" + emp_id + ".bmp",
                                FileMode.OpenOrCreate, FileAccess.Write);
            bw = new BinaryWriter(fs);

            // Reset the starting byte for the new BLOB.
            startIndex = 0;

            // Read the bytes into outbyte[] and retain the number of bytes returned.
            retval = myReader.GetBytes(1, startIndex, outbyte, 0, bufferSize);

            // Continue reading and writing while there are bytes beyond the size of the buffer.
            while (retval == bufferSize)
            {
                bw.Write(outbyte);
                bw.Flush();

                // Reposition the start index to the end of the last buffer and fill the buffer.
                startIndex += bufferSize;
                retval = myReader.GetBytes(1, startIndex, outbyte, 0, bufferSize);
            }

            // Write the remaining buffer.
            bw.Write(outbyte, 0, (int)retval);
            bw.Flush();

            // Close the output file.
            bw.Close();
            fs.Close();
        }

        // Close the reader and the connection.
        myReader.Close();
        _conn.Close();
    }
* 1010.* Как вы думаете, должны быть заменены?Помогите мне, пожалуйста.Я просто новичок в C #

Ответы [ 2 ]

1 голос
/ 11 марта 2012

Вы должны изменить что-то в своем примере.

  1. Объявите вашу переменную fs как MemoryStream fs
  2. Перед инициализацией вызова потока памяти
    retval = myReader.GetBytes(1, 1, null, 0, 0);
    вполучите общую длину ваших данных
  3. Инициализируйте ваш поток памяти как fs = new MemoryStream(retval);
  4. Считайте ваши данные, как вы делаете сейчас.
  5. Перед тем, как fs.Close () передаст ваш MemoryStreamк картинке. Изображение как `PictureBox1.Image = Image.FromStream (fs);
1 голос
/ 11 марта 2012

Вы можете использовать MemoryStream для достижения этой цели. Предполагая, что BLOB-объект является правильно сформированным изображением, которое поддерживается элементом управления PictureBox ...

    MemoryStream memoryStream = new MemoryStream(outbyte);
    pictureBox.Image = Image.FromStream(memoryStream);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...