C# 读写 Oracle BLOB 数据
2011-11-29 17:50
501 查看
using System;
using System.Data.OracleClient;
using System.IO;
namespace fenghua.Data.Oracle
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
public class OracleLobData
{
private OracleConnection conn;
public OracleLobData()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/*
* 在调用此函数之前需要写插入一个字符串到 BLOB 中比如:
* Select some data.
* Table Schema:
* "CREATE TABLE tablewithlobs (a int, b BLOB, c CLOB, d NCLOB)";
* "INSERT INTO tablewithlobs values (1, 'AA', 'AAA', N'AAAA')";
* 否则程序会在 OracleLob tempLob = reader.GetOracleLob(0) 处出错。
*/
/// <summary>
/// 文件写入到 Oracle Blob 字段中。
/// </summary>
/// <param name="idData">id 值</param>
/// <param name="fileName">文件名</param>
/// <param name="id">id 键</param>
/// <param name="blob">blob 键</param>
/// <param name="tableName">表名</param>
public void WriteBlob(int idData, string fileName, string id, string blob, string tableName)
{
string connString = "server=oratest;User ID=kttest;Password=test";
using(conn = new OracleConnection(connString))
{
try
{
conn.Open();
OracleCommand cmd = conn.CreateCommand();
// 利用事务处理(必须)
OracleTransaction transaction = cmd.Connection.BeginTransaction();
cmd.Transaction = transaction;
// 获得 OracleLob 指针
cmd.CommandText = "select " + blob + " from " + tableName + " where " + id + " = " + idData + " FOR UPDATE";
OracleDataReader reader = cmd.ExecuteReader();
using(reader)
{
//Obtain the first row of data.
reader.Read();
//Obtain a LOB.
OracleLob tempLob = reader.GetOracleLob(0);
// 将文件写入 BLOB 中
FileStream fs = new FileStream(fileName,FileMode.Open);
tempLob.BeginBatch(OracleLobOpenMode.ReadWrite);
int length = 10485760;
byte[] Buffer = new byte[length];
int i;
while((i = fs.Read(Buffer,0,length)) > 0)
{
tempLob.Write(Buffer,0,i);
}
fs.Close();
tempLob.EndBatch();
cmd.Parameters.Clear();
}
// 提交事务
transaction.Commit();
}
catch(Exception ex)
{
throw ex;
}
finally
{
conn.Close();
}
}
}
/// <summary>
/// 读取 Oracle Blob 到文件中。
/// </summary>
/// <param name="idData">id 值</param>
/// <param name="fileName">文件名</param>
/// <param name="id">id 键</param>
/// <param name="blob">blob 键</param>
/// <param name="tableName">表名</param>
public void ReadBlob(int idData,string fileName, string id, string blob, string tableName)
{
string connString = "server=oratest;User ID=kttest;Password=test";
using(conn = new OracleConnection(connString))
{
try
{
conn.Open();
OracleCommand cmd = conn.CreateCommand();
// 利用事务处理(必须)
OracleTransaction transaction = cmd.Connection.BeginTransaction();
cmd.Transaction = transaction;
// 获得 OracleLob 指针
string sql = "select " + blob + " from " + tableName + " where " + id + " = " + idData;
cmd.CommandText = sql;
OracleDataReader dr = cmd.ExecuteReader();
dr.Read();
OracleLob tempLob = dr.GetOracleLob(0);
dr.Close();
// 读取 BLOB 中数据,写入到文件中
FileStream fs = new FileStream(fileName,FileMode.Create);
int length = 1048576;
byte[] Buffer = new byte[length];
int i;
while((i = tempLob.Read(Buffer,0,length)) > 0)
{
fs.Write(Buffer,0,i);
}
fs.Close();
tempLob.Clone();
cmd.Parameters.Clear();
// 提交事务
transaction.Commit();
}
catch(Exception ex)
{
throw ex;
}
finally
{
conn.Close();
}
}
}
}
}
using System.Data.OracleClient;
using System.IO;
namespace fenghua.Data.Oracle
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
public class OracleLobData
{
private OracleConnection conn;
public OracleLobData()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/*
* 在调用此函数之前需要写插入一个字符串到 BLOB 中比如:
* Select some data.
* Table Schema:
* "CREATE TABLE tablewithlobs (a int, b BLOB, c CLOB, d NCLOB)";
* "INSERT INTO tablewithlobs values (1, 'AA', 'AAA', N'AAAA')";
* 否则程序会在 OracleLob tempLob = reader.GetOracleLob(0) 处出错。
*/
/// <summary>
/// 文件写入到 Oracle Blob 字段中。
/// </summary>
/// <param name="idData">id 值</param>
/// <param name="fileName">文件名</param>
/// <param name="id">id 键</param>
/// <param name="blob">blob 键</param>
/// <param name="tableName">表名</param>
public void WriteBlob(int idData, string fileName, string id, string blob, string tableName)
{
string connString = "server=oratest;User ID=kttest;Password=test";
using(conn = new OracleConnection(connString))
{
try
{
conn.Open();
OracleCommand cmd = conn.CreateCommand();
// 利用事务处理(必须)
OracleTransaction transaction = cmd.Connection.BeginTransaction();
cmd.Transaction = transaction;
// 获得 OracleLob 指针
cmd.CommandText = "select " + blob + " from " + tableName + " where " + id + " = " + idData + " FOR UPDATE";
OracleDataReader reader = cmd.ExecuteReader();
using(reader)
{
//Obtain the first row of data.
reader.Read();
//Obtain a LOB.
OracleLob tempLob = reader.GetOracleLob(0);
// 将文件写入 BLOB 中
FileStream fs = new FileStream(fileName,FileMode.Open);
tempLob.BeginBatch(OracleLobOpenMode.ReadWrite);
int length = 10485760;
byte[] Buffer = new byte[length];
int i;
while((i = fs.Read(Buffer,0,length)) > 0)
{
tempLob.Write(Buffer,0,i);
}
fs.Close();
tempLob.EndBatch();
cmd.Parameters.Clear();
}
// 提交事务
transaction.Commit();
}
catch(Exception ex)
{
throw ex;
}
finally
{
conn.Close();
}
}
}
/// <summary>
/// 读取 Oracle Blob 到文件中。
/// </summary>
/// <param name="idData">id 值</param>
/// <param name="fileName">文件名</param>
/// <param name="id">id 键</param>
/// <param name="blob">blob 键</param>
/// <param name="tableName">表名</param>
public void ReadBlob(int idData,string fileName, string id, string blob, string tableName)
{
string connString = "server=oratest;User ID=kttest;Password=test";
using(conn = new OracleConnection(connString))
{
try
{
conn.Open();
OracleCommand cmd = conn.CreateCommand();
// 利用事务处理(必须)
OracleTransaction transaction = cmd.Connection.BeginTransaction();
cmd.Transaction = transaction;
// 获得 OracleLob 指针
string sql = "select " + blob + " from " + tableName + " where " + id + " = " + idData;
cmd.CommandText = sql;
OracleDataReader dr = cmd.ExecuteReader();
dr.Read();
OracleLob tempLob = dr.GetOracleLob(0);
dr.Close();
// 读取 BLOB 中数据,写入到文件中
FileStream fs = new FileStream(fileName,FileMode.Create);
int length = 1048576;
byte[] Buffer = new byte[length];
int i;
while((i = tempLob.Read(Buffer,0,length)) > 0)
{
fs.Write(Buffer,0,i);
}
fs.Close();
tempLob.Clone();
cmd.Parameters.Clear();
// 提交事务
transaction.Commit();
}
catch(Exception ex)
{
throw ex;
}
finally
{
conn.Close();
}
}
}
}
}
相关文章推荐
- C# 读写 Oracle BLOB 数据
- C# 读写 Oracle BLOB 数据
- C#读写mysql的blob数据代码样例
- Oracle中BLOB和CLOB数据的读写
- PowerBuilder 读写Oracle CLOB 和BLOB的数据
- C# 连接 Oracle,读取Blob字段数据,存到文件中去,包括pdf等等
- C#中通过OleDb操作Oracle Blob数据类型
- 用C#将sql中的blob数据存储到oracle中
- Hibernate实现Oracle Blob/Clob类型数据读写
- VBA读写Oracle的Blob数据
- Oracle 写入和读取blob类型的数据(C#)
- [翻译]Visual C# .NET中使用ADO.NET读写 BLOB 数据
- C#中通过使用ADO.NET读写BLOB数据
- C#读写操作app.config中的数据
- C#读写app.config中的数据
- C#读写app.config中的数据
- .net C#,access,MDB数据库BLOB二进制字段的读写
- .NET : 存取BLOB数据(Oracle)
- C#利用ODP.NET往oracle中高效插入百万数据
- 使用ADO.NET 和C# 处理BLOB 数据