[예제]Oracle BLOB 컬럼을 이용 binary로 파일을 DB에 저장
본 예제에서는 Excel 파일등을 바이너리로 오라클 서버의 BLOB로 올라가는 것을 테스트 했습니다.
본 예제는 제가 닷넷 개발자 과정을 강의 할때 UIT의 서주현 대리님께서 작성 하신 예제 입니다...
VS .NET에서 새 프로젝트 하나 만드시구요, C# --> 웹응용 프로그램 입니다.
----------------------------
1. Webform1.aspx
----------------------------
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="File.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm1</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server" enctype="multipart/form-data">
<input id="filMyFile" type="file" runat="server" NAME="filMyFile" style="WIDTH: 416px; HEIGHT: 22px"
size="50"><br>
<input type="submit" value="쿼리 전송">
</form>
</body>
</HTML>
----------------------------
2. Webform1.aspx.cs
----------------------------
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.IO;
using Oracle.DataAccess;
using Oracle.DataAccess.Types;
using Oracle.DataAccess.Client;
namespace File
{
/// <summary>
/// WebForm1에 대한 요약 설명입니다.
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.HtmlControls.HtmlInputFile filMyFile;
private void Page_Load(object sender, System.EventArgs e)
{
//HtmlInputFile 클래스에서 제공하는 프러퍼티중에서 PostedFile은
//업로드된 파일이 없다면 PostedFile은 null입니다.
//HttpPostedFile 개체는 다음과 같은 4개의 프로퍼티를 제공합니다.
//ContentLength : 업로드된 파일의 크기
//ContentType : 업로드된 파일의 MIME 타입(예 : image/gif)
//FileName : 클라이언트 컴퓨터 상에서의 업로드된 파일의 전체경로 (예 : c:tempMyPicture.gif)
//InputStream : 업로드된 데이터를 엑서스하기 위한 스트림 개체
if( filMyFile.PostedFile != null )
{
// HttpPostedFile 개체를 받아 옵니다.
HttpPostedFile myFile = filMyFile.PostedFile;
//파일 사이즈를 받아 옵니다.
int intFileLength = System.Convert.ToInt32(myFile.ContentLength);
// Ensure that there were contents to the file. Exit out of the function if there is no content.
if (intFileLength == 0)
{
return;
}
//파일 사이즈 만큼 바이트 배열을 잡는다.
byte[] myData = new byte[intFileLength];
//스트림에서 파일을 읽어 바이트 배열에 담자.
myFile.InputStream.Read(myData, 0, intFileLength);
//파일 생성
string strPath = @"C:\Temp" + Path.GetFileName(myFile.FileName);
FileStream newFile = new FileStream(strPath, FileMode.Create);
//byte 배열의 내용을 파일에 씁니다.
newFile.Write(myData, 0, myData.Length);
//파일을 닫습니다.
newFile.Close();
//Open our database connection to the table with the BLOB field
OracleConnection oConn = new OracleConnection("Data Source=UIT;User ID=system;Password=uit");
OracleDataAdapter oDA = new OracleDataAdapter("SELECT * FROM TC_FILES", oConn);
OracleCommandBuilder oCB = new OracleCommandBuilder(oDA);
DataSet ds = new DataSet();
DataRow dr;
// Fill the dataset with the schema but not the data
oDA.MissingSchemaAction = MissingSchemaAction.AddWithKey;
oConn.Open();
oDA.FillSchema(ds, SchemaType.Source, "TC_FILES");
// This may not be necessary
byte[] byteData = new byte[intFileLength];
myFile.InputStream.Read(byteData, 0, intFileLength);
// Create a new row to insert into the table
dr = ds.Tables["TC_FILES"].NewRow();
dr["FILE_ID"] = 1; // this should not be needed ... it's a sequence but will not allow nulls? so the 1 is a placeholder
dr["FILE_NAME"] = System.IO.Path.GetFileName(myFile.FileName);
dr["FILE_DATA"] = myData;
// Append the new row to the dataset
ds.Tables["TC_FILES"].Rows.Add(dr);
// Update the table using our dataset against our data adapter
oDA.Update(ds, "TC_FILES");
// Close our connection
oConn.Close();
//
// // Refresh the contents to the datagrid
// BindDataGrid(oConn, dgdFiles, "SELECT DOC_ID AS FILE_ID, FILENAME AS FILE_NAME, DBMS_LOB.GETLENGTH(DOCUMENT) AS FILE_SIZE FROM DOCUMENT FILES");
}
}
#region Web Form 디자이너에서 생성한 코드
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 이 호출은 ASP.NET Web Form 디자이너에 필요합니다.
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 디자이너 지원에 필요한 메서드입니다.
/// 이 메서드의 내용을 코드 편집기로 수정하지 마십시오.
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
본 예제에서는 Excel 파일등을 바이너리로 오라클 서버의 BLOB로 올라가는 것을 테스트 했습니다.
본 예제는 제가 닷넷 개발자 과정을 강의 할때 UIT의 서주현 대리님께서 작성 하신 예제 입니다...
VS .NET에서 새 프로젝트 하나 만드시구요, C# --> 웹응용 프로그램 입니다.
----------------------------
1. Webform1.aspx
----------------------------
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="File.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm1</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server" enctype="multipart/form-data">
<input id="filMyFile" type="file" runat="server" NAME="filMyFile" style="WIDTH: 416px; HEIGHT: 22px"
size="50"><br>
<input type="submit" value="쿼리 전송">
</form>
</body>
</HTML>
----------------------------
2. Webform1.aspx.cs
----------------------------
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.IO;
using Oracle.DataAccess;
using Oracle.DataAccess.Types;
using Oracle.DataAccess.Client;
namespace File
{
/// <summary>
/// WebForm1에 대한 요약 설명입니다.
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.HtmlControls.HtmlInputFile filMyFile;
private void Page_Load(object sender, System.EventArgs e)
{
//HtmlInputFile 클래스에서 제공하는 프러퍼티중에서 PostedFile은
//업로드된 파일이 없다면 PostedFile은 null입니다.
//HttpPostedFile 개체는 다음과 같은 4개의 프로퍼티를 제공합니다.
//ContentLength : 업로드된 파일의 크기
//ContentType : 업로드된 파일의 MIME 타입(예 : image/gif)
//FileName : 클라이언트 컴퓨터 상에서의 업로드된 파일의 전체경로 (예 : c:tempMyPicture.gif)
//InputStream : 업로드된 데이터를 엑서스하기 위한 스트림 개체
if( filMyFile.PostedFile != null )
{
// HttpPostedFile 개체를 받아 옵니다.
HttpPostedFile myFile = filMyFile.PostedFile;
//파일 사이즈를 받아 옵니다.
int intFileLength = System.Convert.ToInt32(myFile.ContentLength);
// Ensure that there were contents to the file. Exit out of the function if there is no content.
if (intFileLength == 0)
{
return;
}
//파일 사이즈 만큼 바이트 배열을 잡는다.
byte[] myData = new byte[intFileLength];
//스트림에서 파일을 읽어 바이트 배열에 담자.
myFile.InputStream.Read(myData, 0, intFileLength);
//파일 생성
string strPath = @"C:\Temp" + Path.GetFileName(myFile.FileName);
FileStream newFile = new FileStream(strPath, FileMode.Create);
//byte 배열의 내용을 파일에 씁니다.
newFile.Write(myData, 0, myData.Length);
//파일을 닫습니다.
newFile.Close();
//Open our database connection to the table with the BLOB field
OracleConnection oConn = new OracleConnection("Data Source=UIT;User ID=system;Password=uit");
OracleDataAdapter oDA = new OracleDataAdapter("SELECT * FROM TC_FILES", oConn);
OracleCommandBuilder oCB = new OracleCommandBuilder(oDA);
DataSet ds = new DataSet();
DataRow dr;
// Fill the dataset with the schema but not the data
oDA.MissingSchemaAction = MissingSchemaAction.AddWithKey;
oConn.Open();
oDA.FillSchema(ds, SchemaType.Source, "TC_FILES");
// This may not be necessary
byte[] byteData = new byte[intFileLength];
myFile.InputStream.Read(byteData, 0, intFileLength);
// Create a new row to insert into the table
dr = ds.Tables["TC_FILES"].NewRow();
dr["FILE_ID"] = 1; // this should not be needed ... it's a sequence but will not allow nulls? so the 1 is a placeholder
dr["FILE_NAME"] = System.IO.Path.GetFileName(myFile.FileName);
dr["FILE_DATA"] = myData;
// Append the new row to the dataset
ds.Tables["TC_FILES"].Rows.Add(dr);
// Update the table using our dataset against our data adapter
oDA.Update(ds, "TC_FILES");
// Close our connection
oConn.Close();
//
// // Refresh the contents to the datagrid
// BindDataGrid(oConn, dgdFiles, "SELECT DOC_ID AS FILE_ID, FILENAME AS FILE_NAME, DBMS_LOB.GETLENGTH(DOCUMENT) AS FILE_SIZE FROM DOCUMENT FILES");
}
}
#region Web Form 디자이너에서 생성한 코드
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 이 호출은 ASP.NET Web Form 디자이너에 필요합니다.
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 디자이너 지원에 필요한 메서드입니다.
/// 이 메서드의 내용을 코드 편집기로 수정하지 마십시오.
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
오라클자바커뮤니티교육센터, 개발자전문교육, 개인80%환급
www.oraclejavacommunity.com
평일주간(9:30~18:10) 개강
(6/30)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
(6/30)[기업100%환급]안드로이드개발자과정
(6/30)[기업100%환급]SQL기초에서 Schema Object까지
(7/07)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍
(7/07)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(7/07)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
(7/07)[채용예정교육]오라클자바개발잘하는신입뽑기프로젝트,교육전취업확정
평일야간(19:00~21:50) 개강
(6/26)SQL초보에서실전전문가까지
(7/01)안드로이드개발자과정
(7/01)닷넷(C#,Network,ADO.NET,ASP.NET)마스터과정
(7/02)Spring3.X, MyBatis, Hibernate실무과정
(7/02)자바웹(JSP,Spring,MyBatis,XPlatform)프로젝트과정
(7/02)JAVA,Network&WEB&Framework(자바기초에서웹스프링까지)
(7/03)웹퍼블리싱 마스터
(7/15)MyBatis3.X, Hibernate4.X ORM실무과정
(7/22)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
주말(10:00~17:50) 개강
(6/28)Spring3.X, MyBatis, Hibernate실무과정
(6/28)안드로이드개발자과정
(6/28)실무예제로 배워보는 jQuery(개발자/디자이너를위한)
(6/28)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(7/05)SQL초보에서 Schema Object까지
(7/12)자바웹(JSP,Spring,MyBatis,XPlatform)프로젝트과정
(7/12)MyBatis3.X, Hibernate4.X ORM실무과정
(7/12)개발자를위한PLSQL,SQL튜닝,힌트
(7/13)C#,ASP.NET마스터
주말저녁(18:30~22:20) 개강
(6/28)JAVA,Network&WEB&Framework
(6/28)SQL기초에서실무까지
www.oraclejavacommunity.com
평일주간(9:30~18:10) 개강
(6/30)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
(6/30)[기업100%환급]안드로이드개발자과정
(6/30)[기업100%환급]SQL기초에서 Schema Object까지
(7/07)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍
(7/07)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(7/07)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
(7/07)[채용예정교육]오라클자바개발잘하는신입뽑기프로젝트,교육전취업확정
평일야간(19:00~21:50) 개강
(6/26)SQL초보에서실전전문가까지
(7/01)안드로이드개발자과정
(7/01)닷넷(C#,Network,ADO.NET,ASP.NET)마스터과정
(7/02)Spring3.X, MyBatis, Hibernate실무과정
(7/02)자바웹(JSP,Spring,MyBatis,XPlatform)프로젝트과정
(7/02)JAVA,Network&WEB&Framework(자바기초에서웹스프링까지)
(7/03)웹퍼블리싱 마스터
(7/15)MyBatis3.X, Hibernate4.X ORM실무과정
(7/22)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
주말(10:00~17:50) 개강
(6/28)Spring3.X, MyBatis, Hibernate실무과정
(6/28)안드로이드개발자과정
(6/28)실무예제로 배워보는 jQuery(개발자/디자이너를위한)
(6/28)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(7/05)SQL초보에서 Schema Object까지
(7/12)자바웹(JSP,Spring,MyBatis,XPlatform)프로젝트과정
(7/12)MyBatis3.X, Hibernate4.X ORM실무과정
(7/12)개발자를위한PLSQL,SQL튜닝,힌트
(7/13)C#,ASP.NET마스터
주말저녁(18:30~22:20) 개강
(6/28)JAVA,Network&WEB&Framework
(6/28)SQL기초에서실무까지
댓글 없음:
댓글 쓰기