사진 이 데이터베이스 에 올 라 온 총 결

본문 은 다음 과 같이 전재 되 었 다.http://www.cnblogs.com/interboy/archive/2007/04/12/710024.html
 
눈 깜짝 할 사이 에 블 로그 원 에서 거의 1 년 을 머 물 렀 습 니 다.저 는 작년 이맘 때 선생님 께 서 프로젝트 가 있 었 던 것 을 기억 할 수 있 습 니 다.이 프로젝트 에서 사진 을 데이터베이스 에 저장 해 야 했 습 니 다.예전 에 제 가 한 것 은 바로 경 로 를 데이터베이스 에 저장 하 는 것 이 었 습 니 다.나중에 이 기능 을 실현 하기 위해 저 는 많은 힘 을 들 였 습 니 다.이것저것 물 어 본 끝 에 CSDN 네티즌 의 도움 으로 완성 되 었 습 니 다.오늘 저녁 에는 또 CSDN 네티즌 이 사진 을 데이터베이스 에 저장 하 는 것 에 관 한 질문 을 했다.다음은 SqlServer,Oracle,Access 데이터베이스 에 그림 을 저장 하 는 방법 을 모 아 보 겠 습 니 다.         먼저,우 리 는 그림 이 데이터베이스 에 바 이 너 리 형식 으로 저장 되 어 있다 는 것 을 알 아야 한다.그러면 그림 을 데이터베이스 에 저장 하 는 절 차 는 대체적으로 이 몇 단계 가 있다.1.그림 을 바 이 너 리 배열(by te[]로 변환 한다.2.변 환 된 바 이 너 리 배열(by te[])을 실행 할 Command 에 매개 변수 로 전달 합 니 다.3.명령 실행 하기;      우선,어떻게 그림 을 byte[]로 변환 합 니까?만약 ASP.Net 2.0 을 사용한다 면,FileUpLoad 컨트롤 을 사용 하여 byte[]fileData=this.FileUpload 1.FileBytes 를 실현 할 수 있 습 니 다.ASP.Net 1.1 을 사용 하거나 WinForm 을 만 들 고 있다 면 다음 방법 으로 그림 을 by te[]로 변환 할 수 있 습 니 다.
public byte[] getBytes(string filePath)
{
    System.IO.FileStream fs = new System.IO.FileStream(filePath, System.IO.FileMode.Open);
    byte[] imgData = new byte[fs.Length];
    fs.Read(imgData, 0, (int)fs.Length);
    return imgData;
}

 다음 에 우리 가 해 야 할 일 은 이미 얻 은 byte[]를 매개 변수 로 command 대상 1.SqlServer 데이터베이스 에 전달 하 는 것 이다.SqlServer 는 Image 필드 형식 으로 2G 의 데 이 터 를 최대 로 저장 할 수 있 습 니 다.
 
 
byte[] fileData = this.FileUpload1.FileBytes;

string sql = "insert into t_img(img) values (@img)";
string strconn = System.Configuration.ConfigurationManager.ConnectionStrings["fengdongDB"].ToString();
SqlConnection sqlConn = new SqlConnection(strconn);
SqlCommand sqlComm = new SqlCommand(sql, sqlConn);
sqlComm.Parameters.Add("@img", SqlDbType.Image);//    
sqlComm.Parameters["@img"].Value = fileData;//     

sqlConn.Open();
sqlComm.ExecuteNonQuery();
sqlConn.Close();

 
2.Oracle 데이터베이스.Oracle 데이터베이스 에서 저 희 는 BLOB 필드 형식 을 사용 할 수 있 고 최대 4G 의 데 이 터 를 저장 할 수 있 습 니 다.
byte[] fileData = this.FileUpload1.FileBytes;

string sql = "insert into t_img(imgid,IMGDATA) values(100,:IMGDATA)";
string strconn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionStringForOracle"].ToString();
OracleConnection oraConn = new OracleConnection(strconn);
OracleCommand oraComm = new OracleCommand(sql, oraConn);
oraComm.Parameters.Add(":IMGDATA", OracleType.Blob);//    
oraComm.Parameters[":IMGDATA"].Value = fileData;//     

oraConn.Open();
oraComm.ExecuteNonQuery();
oraConn.Close();

 
메모:여기 설명 이 필요 합 니 다.Oracle 전용 연결 로 파 라 메 터 를 전달 할 때 조심 하 세 요.위의 SQL 문 구 를 보면 알 수 있 습 니 다.매개 변수 이름 앞 에":"그렇지 않 으 면 다음 오류 가 발생 합 니 다."Oracle Exception:   ORA-01036:   "불법 변수 이름/번호".여 기 는 우리 가 주의해 야 한다.또 하 나 는 System.Data.Oracle Client 네 임 스페이스 를 인용 할 때 기본적으로 없습니다.System.Data.Oracle Client 에 대한 인용 을 추가 해 야 합 니 다.VS 2003 에 Oracle Client 가 설치 되 어 있 으 면 인용 을 추가 하지 않 아 도 도입 할 수 있 는 것 으로 기억 합 니 다.여기 도 유의 해 야 한다.3.Access 데이터베이스.Access 에서 저 희 는 OLE 대상 필드 형식 을 사용 하여 1G 의 데 이 터 를 최대 로 지원 합 니 다.
byte[] fileData = this.FileUpload1.FileBytes;

string sql = "insert into t_img(IMGDATA) values(?)";
string strconn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionStringForAccess"].ToString();

OleDbConnection oleConn = new OleDbConnection(strconn);
OleDbCommand oleComm = new OleDbCommand(sql, oleConn);
oleComm.Parameters.Add("imgdata", OleDbType.Binary);
oleComm.Parameters["imgdata"].Value = fileData;

oleConn.Open();
oleComm.ExecuteNonQuery();
oleConn.Close();

 
자,여기 서 우 리 는 그림 을 데이터베이스 에 저장 하 는 것 을 모두 말 했 습 니 다.다음은 어떻게 데이터베이스 에서 그림 을 읽 는 지 말 해 야 합 니 다.실제로 이것 은 삽입 체조 와 반대 되 는 과정 이다.먼저 데이터베이스 에서 얻 은 그림 데 이 터 를 배열 로 바 꾼 다음 에 배열 을 그림 으로 바 꾸 는 것 을 보고 하 는 것 이다.서로 다른 데이터 사이 에는 큰 차이 가 없습니다.저 는 Oracle 데이터베이스 에서 데 이 터 를 읽 어서 참고 할 수 있 도록 만 열거 합 니 다.
 
private byte[] getImageDataFromOracle()
{
    string sql = "select IMGDATA from t_img where imgID=100";
    string strconn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionStringForOracle"].ToString();
    OracleConnection oraConn = new OracleConnection(strconn);
    OracleCommand oraComm = new OracleCommand(sql, oraConn);

    oraConn.Open();
    byte[] fileData = (byte[])oraComm.ExecuteScalar();
    oraConn.Close();

    return fileData;
}

 
우 리 는 데 이 터 를 얻 었 다.그러면 by te[]를 그림 으로 바 꾸 는 과정 은 모두 같다.
private System.Drawing.Image convertByteToImg(byte[] imgData)
{
    System.IO.MemoryStream ms = new System.IO.MemoryStream(imgData);
    System.Drawing.Image img = System.Drawing.Image.FromStream(ms);
    return img;
}

 
WinForm 애플 리 케 이 션 을 개발 하고 있다 면 결 과 를 PictureBox 에 저장 하거나 표시 할 수 있 습 니 다.ASP.Net 을 사용 하고 있다 면 단독 페이지 에서 그림 을 출력 할 수 있 습 니 다.다른 페이지 에서 Image 컨트롤 의 ImageUrl 속성 을 그림 으로 표시 할 수 있 습 니 다.예 를 들 어 출력 페이지 getImg.aspx 의 코드
protected void Page_Load(object sender, EventArgs e)
{
    string sql = "select IMGDATA from t_img where imgID=100";
    string strconn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionStringForOracle"].ToString();
    OracleConnection oraConn = new OracleConnection(strconn);
    OracleCommand oraComm = new OracleCommand(sql, oraConn);

    oraConn.Open();
    byte[] fileData = (byte[])oraComm.ExecuteScalar();
    oraConn.Close();

    System.IO.MemoryStream ms = new System.IO.MemoryStream(fileData);
    System.Drawing.Image img = System.Drawing.Image.FromStream(ms);
    img.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
}

 
 

좋은 웹페이지 즐겨찾기