2016년 12월 26일 월요일

[닷넷교육,C#교육,실무교육학원추천_탑크리에듀][예제]Oracle BLOB 컬럼을 이용 binary로 파일을 DB에 저장

[예제]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 
        } 

댓글 없음:

댓글 쓰기