Wednesday, 24 July 2013

Working with Oracle's BLOB and Microsoft's C#

We used this title for describing technologies , we are working in.

Here we will see
How to store files in oracle database using c# ?  "

Step 1:
          Use file uploader controller to browse directories.

Step 2:
         Before uploading file or its path , we need to understand BLOB of Oracle

         BLOB  ( Binary Large Objects ) : 
                                                  File content store in binary format.In Oracle , BLOB and    CLOB  (Character Large Object) used.Technically BLOB prefered.For more info regarding BLOB click here .

Step 3 : 
      In C# , use System.IO namespace for file operations.
Step 4:
        string path = FileUpload1.PostedFile.FileName.ToString();
        string FileName = FileUpload1.FileName.ToString();
        string FileSize = FileUpload1.PostedFile.ContentLength.ToString();
        string FileContent = FileUpload1.PostedFile.ContentType.ToString();
        string filename = Path.GetFileName(path);

        /* FileStream that used to handle reading file path , file mode setting  etc*/        FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
        int streamLength = (int)fs.Length;
        BinaryReader br = new BinaryReader(fs);  
        byte[] bytes = br.ReadBytes((Int32)fs.Length);   // Binary reader need to store values in byte array        byte[] _data = File.ReadAllBytes(path);     // This is another way of reading values of direct file

      //Declare Oracle connections and Oracle command
       OracleBlob myLob = new OracleBlob(conn);           
       //Transfer data to server       myLob.Write(_data, 0, streamLength);
       //Perform INSERT query       cmd = new OracleCommand(query, conn);
       OracleParameter myParam = cmd.Parameters.Add("fileContent", OracleDbType.Blob);
       myParam.Value = myLob;

Step 5 :

    After storing file into database , you need to retrieve it for dowloading.
   - Write " Select query  " for retrieving all details.
   - Get all details in binarty format , for that refer below code,
            cmd = new OracleCommand();
            cmd.CommandText = query;           
            cmd.Connection = conn;
            OracleDataReader dr = cmd.ExecuteReader();
            byte[] data = null;
            if (dr.Read())
                if (dr["DOCCONTENT"] != null)   // Column name
                    data = (byte[])dr["DOCCONTENT"];       // Column name

     -  Read data in byte array
            Response.ContentType = _fileContentType.ToString();
            Response.AddHeader("Content-Disposition", "attachment;filename=\""+fileName+"\"");
            Response.BinaryWrite((byte[])_data);  // Byte array receive data            Response.End();    

Happy Coding...........Enjoy./....


No comments:

Post a Comment