2012-03-11 79 views
1

我已经看到此网站 Read/Write BLOBs from/to SQL Server using C# .NET
从数据库中读取blob后,它将图像保存到FileSystem。
我想改变它。
而是保存图像到文件系统的,我想它显示的图片框c# - 从SQL Server读取blob并显示到图片框

这里是它的一些代码的阅读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(); 
    } 

你认为应该更换? 请帮助我。我只是新来的C#

回答

1

您可以使用MemoryStream来实现这一点。假设blob是由PictureBox控件支持的一个正确形成的图像...

MemoryStream memoryStream = new MemoryStream(outbyte); 
    pictureBox.Image = Image.FromStream(memoryStream); 
+0

哪个部分应该放置?应该删除什么?对于这些问题抱歉。 c#对我来说是一种全新的语言。 – 2012-03-11 06:09:14

1

你应该在你的例子中改变一些东西。

  1. 声明的变量FS作为MemoryStream的FS
  2. 的MemoryStream调用初始化之前
    retval = myReader.GetBytes(1, 1, null, 0, 0);
    ,让您的数据的总长度
  3. 初始化您的MemoryStream为fs = new MemoryStream(retval);
  4. 了解您的数据你现在做。
  5. fs.Close()将你的MemoryStream传递给picturebox.Image作为 `PictureBox1.Image = Image.FromStream(fs);