45fan.com - 路饭网

搜索: 您的位置主页 > 网络频道 > 阅读资讯:Oracle Lob操作类介绍

Oracle Lob操作类介绍

2016-08-31 19:43:20 来源:www.45fan.com 【

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;
}
}
}
}
 

本文地址:http://www.45fan.com/a/question/70441.html
Tags: oracle 操作 Lob
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部