Creative Commons License

Microsoft .NET

닷넷!시작하기
닷넷! Ver 2.0~
닷넷!스킬업
웹개발
윈폼개발
실용모듈개발
Tip & Tech
하루 한 문법

Microsoft .NET 개발자들을 위한 공간입니다. 기초강의에서 부터 고급 기술 정보 및 팁등을 다루도록 하겠습니다.

.

Tip & Tech

개발 중 해결한 혹은 미리 알고 있으면 좋은 팁성 글을 공유하는 공간입니다

[ADO.NET] BLOB 다루기

작성자 : 박종명
최초 작성일 : 2008-05-19 (월요일)
최종 수정일 : 2008-05-19 (월요일)
조회 수 : 3067

파일을 바이너리로 바로 DB에 저장하고 불러오는 데모 예제 입니다.
 
using System;
using System.IO;
using System.Data;
using System.Data.SqlClient;
namespace BlobTest{
  public class Test{  
    public static void Main(){
       string fileName = @"D:\lee.jpg";
       Blob blob = new Blob();           
       //blob.Insert(fileName);                 
       blob.Select();                 
    }
  }
 
  public class Blob{ 
    string connectionStr = "Server=127.0.0.1;user id=아이디;password=패스워드";
    SqlConnection conn;
    FileStream fs;
    BinaryReader br;
    BinaryWriter bw;
         
    private byte[] GetImageByte(string filePath){
      fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
      br = new BinaryReader(fs);
 
      byte[] imageBytes = br.ReadBytes((int)fs.Length);
 
      br.Close();
      fs.Close();
 
      return imageBytes;
    }
   
    public void Insert(string fileName){
       conn = new SqlConnection(connectionStr);
       byte[] imageBytes = this.GetImageByte(fileName);                  
       string sql = "insert into Tbl_BLOB_TEST(Image) values(@Image)";   
       SqlCommand myCommand = new SqlCommand(sql,conn);
       SqlParameter parm = new SqlParameter("@Image",SqlDbType.Image, imageBytes.Length);
       parm.Value = imageBytes;
       myCommand.Parameters.Add(parm);
           
       conn.Open();
       myCommand.ExecuteNonQuery();
       conn.Close();
    }
   
    public void Select(){         
      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.                 
   
      conn = new SqlConnection(connectionStr);
      conn.Open();
      SqlCommand myCommand = new SqlCommand("SELECT Image FROM Tbl_BLOB_TEST", conn);
      SqlDataReader myReader = myCommand.ExecuteReader(CommandBehavior.SequentialAccess);
     
      while (myReader.Read())
      {      
        // Create a file to hold the output.
        fs = new FileStream(@"D:\downLoad.jpg", 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(0, 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(0, startIndex, outbyte, 0, bufferSize);
        }      
        // Write the remaining buffer.
        bw.Write(outbyte, 0, (int)retval - 1);
        bw.Flush();
     
        // Close the output file.
        bw.Close();
        fs.Close();
      }
     
      // Close the reader and the connection.
      myReader.Close();
      conn.Close();
 
    }
  }
}

이름
비밀번호
홈페이지
AG <- 왼쪽의 문자를 오른쪽 박스에 똑같이 입력해 주세요