보안 등의 특정 요구로 인해 사진이나 파일을 데이터베이스에 저장해야 하는 경우도 있습니다. 물론 일반적으로 특히 파일이 상대적으로 큰 경우에는 많은 사람들이 파일을 데이터베이스에 바이너리 형식으로 저장하는 것을 권장하지 않습니다. 파일 내 파일에 대한 액세스는 다음과 같이 구성됩니다(이론은 SQL Server2000의 액세스와 동일합니다. 저장 시 이미지나 파일의 바이너리 바이트 스트림이 데이터에 저장됩니다. 읽을 때 해당 필드는 데이터베이스는 바이트 데이터로 읽혀진 다음 출력됩니다.):
1. TOAD 또는 SQLPlus에서 데이터베이스 테이블을 생성합니다.
1CREATE TABLE TEST_TABLE
2(
3 ID VARCHAR2(36바이트),
4 이름 VARCHAR2(50 BYTE),
5 사진 BLOB
6)
7
2. 새 ASPX 페이지를 만들고 페이지에 FileUpload 컨트롤을 배치하고 이름을 fileUp으로 지정한 다음 btnSave(저장) 및 btnRead(읽기)라는 두 개의 버튼을 배치합니다.
3. btnSave 이벤트에서 다음 코드를 실행하여 사진이나 파일을 저장합니다.
Oracle에 그림(파일) 저장
1StringBuilder sbSQL = new StringBuilder("Test_Table(ID,Name,Photo) 값에 삽입(:ID,:Name,:Photo)");
2 OracleConnection cn = new OracleConnection(strCn);
3 OracleCommand cmd = cn.CreateCommand();
4 cmd.CommandText = sbSQL.ToString();
5 cmd.Parameters.Add(":ID", OracleType.VarChar, 36).Value = Guid.NewGuid().ToString();
6 cmd.Parameters.Add(":Name", OracleType.VarChar, 50).Value = fileUp.FileName;
7 int intLen = fileUp.PostedFile.ContentLength;
8바이트[] pic = 새 바이트[intLen];
9 fileUp.PostedFile.InputStream.Read(pic, 0, intLen);
10 cmd.Parameters.Add(":Photo", OracleType.Blob).Value = pic;
11번 시도
12 {
13 cn.열기();
14 cmd.ExecuteNonQuery();
15}
16 캐치 (예외예외)
17 {
18 응답.쓰기(ex.메시지);
19}
드디어 20
스물 하나 {
22cn.닫기();
스물셋 }
24
4. 읽는 방법은 다음과 같습니다.
Oracle에서 그림(파일) 읽기
1OracleConnection cn = new OracleConnection(strCn);
2OracleCommand cmd = cn.CreateCommand();
3cmd.CommandText = "test_table에서 사진 선택";
4번 시도
5{
6 cn.열기();
7 MemoryStream 스트림 = new MemoryStream();
8 IDataReader 리더 = cmd.ExecuteReader();
9 if (reader.Read())
10 {
11바이트[] pic = (byte[])reader[0];
12 //byte[] pic = (byte[])cmd.ExecuteScalar();
13 스트림.쓰기(그림, 0, 그림.길이);
14 //비트맵 bitMap = new Bitmap(stream);
15 //Response.ContentType = "이미지/Jpeg";
16 //bitMap.Save(Response.OutputStream, ImageFormat.Jpeg);
17 //댓글 부분은 사진을 다운로드하는 대신 IE에서 사진을 표시할 수 있습니다.
18 //다음 메소드는 파일을 직접 다운로드합니다
19 Response.ContentType = "응용 프로그램/옥텟 스트림";
20 Response.AddHeader("콘텐츠 처리", "첨부 파일;파일 이름= 데모.JPG");
21 응답.BinaryWrite(pic);
22 응답.끝();
스물셋 }
스물넷
25}
26catch (예외예외)
27{
28 응답.쓰기(ex.메시지);
29}
30드디어
31{
32cn.닫기();
33}
34
http://www.cnblogs.com/weiweictgu/archive/2006/11/17/563761.html