사진 이 데이터베이스 에 올 라 온 총 결
눈 깜짝 할 사이 에 블 로그 원 에서 거의 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);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
activemq 5.5 의 입문 은 설치, 시작, 데이터베이스 지속 화 를 포함한다Apache ActiveMQ 5.5.0 은 주로 유지보수 버 전 으로 130 개가 넘 는 문 제 를 복 구 했 으 며 대부분 bug 와 개선 이 었 다. Improved performance for offline d...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.