Oracle Lob操作类(代码)

 
using System;
using System.Data.OracleClient;
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;
using Microsoft.Win32;
 
namespace blog.csdn.net.zhangyuk
{
     ///<summary>
     ///
     /// Oracle Lob 对象操作类
     ///
     ///      1 、将文件内容存入 Lob 对象
     ///      2 、将图片存入 Lob 对象
     ///      3 、将 Lob 对象保存到临时文件,返回临时文件名
     ///      4 、将 Lob 对象读入 Bitmap,返回 Bitmap 对象
     ///
     /// 例子:
     ///
     ///      OracleConnection conn = YourConnection.getConnection();
     ///      OracleCommand command = conn.CreateCommand();
     ///      command.CommandText = " SELECT YourLobField FROM YourTableName FOR UPDATE ";
     ///      OracleDataReader dr = command.ExecuteReader();
     ///      if( dr.Read() )
     ///      {
     ///           OracleLob lob = dr.GetOracleLob(0);
     ///
     ///           OracleLobFunctions.GetLobFromImage( lob, YourImageObject );
     ///
     ///           lob.Close();
     ///      }
     ///     
     ///</summary>
     public class OracleLobFunctions
     {
         ///<summary>
         /// 将文件内容填入Lob对象
         ///</summary>
         ///<param name="lob"> 待填充的 Oracle Lob 对象 </param>
         ///<param name="FileName"> 待读取文件的文件名 </param>
         public static void GetLobFromFile( OracleLob lob, string FileName )
         {
              if( lob == null ) return;
 
              Stream sr = null;
              try
              {
                   // 清除 Lob 数据
                   lob.SetLength(0);
 
                   if( !FileName.Equals( string.Empty ) )
                   {
                       // 只读打开文件流
                       sr = new FileStream( FileName, FileMode.Open, FileAccess.Read );
 
                       // 定义缓冲区大小
                       const int size = 1024*1024;
                       byte[] bytes = new byte[ size ];
 
                       // 读取文件内容,写入 Lob 对象
                       int numBytes;
                       while((numBytes = sr.Read(bytes, 0, size)) > 0)
                            lob.Write(bytes, 0, numBytes);
                   }
              }
              catch
              {
                   throw;
              }
              finally
              {
                   lob.Flush();
                   // 关闭文件流
                   if( sr != null ) sr.Close();
              }
         }
 
         ///<summary>
         /// 将Image填入Lob对象
         ///</summary>
         ///<param name="lob"> 待填充的 Oracle Lob 对象 </param>
         ///<param name="img">Image 对象 </param>
         public static void GetLobFromImage( OracleLob lob, Image img )
         {
              if( lob == null ) return;
 
              try
              {
                   if( img != null )
                   {
                       // 将 image 写入 lob 对象
                       img.Save( lob, ImageFormat.Jpeg );
                   }
                   else
                   {
                       // 清除 lob 对象内容
                       lob.SetLength(0);
                   }
                   lob.Flush();
              }
              catch
              {
                   throw;
              }
         }
 
         ///<summary>
         /// 将 Lob 对象保存到临时文件,返回临时文件名
         ///</summary>
         ///<param name="lob">Oracle Lob 对象 </param>
         ///<returns> 临时文件名 </returns>
         public static string SaveLobToTmpFile( OracleLob lob )
         {
              string FileName = string.Empty;
              FileStream sw = null;
              try
              {
                   if( lob != OracleLob.Null && lob.Length > 0 )
                   {
                       // 使用 IE 的临时目录而不使用环境变量定义的临时目录,好处是可以自动清理。
                       RegistryKey rk = Registry.LocalMachine.OpenSubKey(@"SOFTWARE/Microsoft/Windows/CurrentVersion/Internet Settings/Cache/Paths");
                       string tempFileName = (String)rk.GetValue("Directory") + @"/OracleLobViewer.tmp";
                       //string tempFileName = Path.GetTempFileName();
 
                       // 创建临时文件
                       sw = new FileStream( tempFileName, FileMode.OpenOrCreate );
 
                       // 定义缓冲区
                       const int size = 1024*1024;
                       byte[] bytes = new byte[size];
 
                       // 将 Lob 内容写入临时文件
                       int numBytes;
                       while((numBytes = lob.Read(bytes, 0, size)) > 0)
                            sw.Write(bytes, 0, numBytes);
 
                       // 返回临时文件名
                       FileName = tempFileName;
                   }
                   return FileName;
              }
              catch
              {
                   throw;
              }
              finally
              {
                   // 关闭文件流
                   if( sw != null ) sw.Close();
              }
         }
 
         ///<summary>
         /// 将 Lob 对象读入 Bitmap
         ///</summary>
         ///<param name="lob">Oracle Lob 对象 </param>
         ///<returns>Bitmap 对象 </returns>
         public static Bitmap SaveLobToImage( OracleLob lob )
         {
              Bitmap img = null;
              try
              {
                   if( lob != OracleLob.Null && lob.Length > 0 )
                   {
                       img = Bitmap.FromStream( lob ) as Bitmap;
                   }
                   return img;
              }
              catch
              {
                   throw;
              }
         }
     }
}
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值