我在C#下访问ORACLE数据库。 读取数据。其中有个字段TEMP是CLOB类型。读取完后。发现有些记录的TEMP这个字段的值没有读取过来。请问下是为什么。我在网上找了下。有的说是CLOB存储的容量。在读取过来时超出了SQL的大小出现了问题。我对ORACLE不熟。请大家指点下。 如果能 给出 关于 CLOB类型的 读写方式更好。谢谢
解决方案 »
- c# winform 自定义Image属性
- 声音波形图
- datagridview 如何判断选中的是最后一行
- 运算符“-”无法应用于“string”和“string”类型的操作数
- C# 操作SQL如何达到最佳方案 老手请进,问题解决高分回报
- 高手们紧急求救!
- 探讨一下这种取数据库键的方式,会不会有问题????
- 我自己写了一个简单的Windows的控件是一个画圆的小控件,可是放到Winform上后,当改变控件大小时,里面画的圆却不能即时刷新改变(是根据
- 请教一下水晶报表的高手,在程序中生成的DATASET(字段不确定),要怎么来使用水晶报表
- C# .NET + SQL SERVER 工程师深圳工作调查
- MD5
- System.Timers.Timer 多线程 ,同时首次进入?c#
/// 读取 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(reader)
{
OracleLob BLOB = reader.GetOracleLob(1)
byte[] buffer = System.Text.Encoding.Unicode.GetBytes(Content);
if (buffer.Length < BLOB.Length)
{
BLOB.SetLength(buffer.Length)
}
BLOB.Write(buffer,0,buffer.Length);
bReturn = true;
}