中国学客联盟

 找回密码
 立即注册
查看: 3898|回复: 11

Oracle Lob操作类(代码)

[复制链接]

产品经理

Rank: 70Rank: 70Rank: 70Rank: 70Rank: 70Rank: 70Rank: 70

UID
40
威望
0
贡献
0
在线时间
1 小时
注册时间
2014-2-26
听众
253474
发表于 2014-8-1 12:21:21 | 显示全部楼层 |阅读模式
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;
              }
         }
     }
}


中级会员

Rank: 3Rank: 3Rank: 3

UID
3640226
威望
61
贡献
0
在线时间
0 小时
注册时间
2016-7-30
听众
0
发表于 2016-9-2 15:16:28 | 显示全部楼层
LZ真是人才

中级会员

Rank: 3Rank: 3Rank: 3

UID
3640212
威望
68
贡献
0
在线时间
0 小时
注册时间
2016-6-26
听众
0
发表于 2016-9-2 15:20:11 | 显示全部楼层
难得一见的好帖

中级会员

Rank: 3Rank: 3Rank: 3

UID
3640212
威望
68
贡献
0
在线时间
0 小时
注册时间
2016-6-26
听众
0
发表于 2016-9-2 15:33:45 | 显示全部楼层
很不错

中级会员

Rank: 3Rank: 3Rank: 3

UID
3640226
威望
61
贡献
0
在线时间
0 小时
注册时间
2016-7-30
听众
0
发表于 2016-9-2 15:47:53 | 显示全部楼层
说的非常好

中级会员

Rank: 3Rank: 3Rank: 3

UID
3640223
威望
64
贡献
0
在线时间
1 小时
注册时间
2016-7-22
听众
0
发表于 2016-9-2 15:55:36 | 显示全部楼层
不错不错

高级会员

Rank: 4

UID
3553630
威望
153
贡献
0
在线时间
1 小时
注册时间
2014-6-20
听众
0
发表于 2016-10-14 16:29:58 | 显示全部楼层
楼主是超人

高级会员

Rank: 4

UID
3553606
威望
153
贡献
0
在线时间
1 小时
注册时间
2014-6-19
听众
0
发表于 2016-10-14 16:36:10 | 显示全部楼层
很不错

中级会员

Rank: 3Rank: 3Rank: 3

UID
3640441
威望
63
贡献
0
在线时间
1 小时
注册时间
2016-10-14
听众
0
发表于 2016-10-14 16:45:17 | 显示全部楼层
顶顶多好

高级会员

Rank: 4

UID
3553579
威望
152
贡献
0
在线时间
1 小时
注册时间
2014-6-19
听众
0
发表于 2016-10-14 16:49:37 | 显示全部楼层
说的非常好
高级模式
B Color Image Link Quote Code Smilies

本版积分规则

快速回复 返回顶部 返回列表