2012-03-11 15 views
1

私はこのサイトを見たことがあります Read/Write BLOBs from/to SQL Server using C# .NET
データベースからブロブを読み取った後、画像をFileSystemに保存しています。
私はそれを変更したいと思います。
の代わりに、私はここでのPictureBoxc# - SQL Serverからブロブを読み取って画像ボックスに表示

にそれを表示したいファイルシステムに画像を保存するには、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を使用することができます。ブロブが、PictureBoxコントロールでサポートされている適切に形成されたイメージであると仮定します。

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

これをどこに置く必要がありますか?何が削除されるべきですか?これらの質問を申し訳ありません。 C#は私にとって全く新しい言語です。 –

1

例では何かを変更する必要があります。


  1. retval = myReader.GetBytes(1, 1, null, 0, 0);
    のようにあなたのデータを読むfs = new MemoryStream(retval);
  2. としてあなたのMemoryStreamを初期化し
  3. あなたのデータの合計の長さを取得するためのMemoryStreamコールの初期化前のMemoryStream FS
  4. としてあなたの変数FSを宣言しますあなたは今行う。
  5. fs.Close()の前に、MemoryStreamをpicturebox.Imageに渡します。 `PictureBox1.Image = Image.FromStream(fs);
関連する問題