public void ReadLobExample()
{
int actual = 0;
string path = "e:\\site\\aqjc\\sql\\b.doc ";
string sql = "SELECT tmp_blob FROM tmp where tmp_id = '128 ' ";
OracleDataReader reader = cn.GetReader(sql);
if(reader.Read() == true)
{
//读取BLOB字段
OracleLob BLOB = reader.GetOracleLob(0);
this.blobOutFile(blob,path);
}
}
/// <summary>
/// 将ORACLE数据库中BLOB这段内容输出到硬盘上生成文件
/// </summary>
/// <param name= "BLOB "> BLOB字段内容 </param>
/// <param name= "filePathName "> 要生成的文件名,绝对路径 </param>
public void blobOutFile(OracleLob BLOB,string filePathName)
{
//将LOGN值转换为INT值,以便定义BYTE[]长度
int actual = Convert.ToInt32(BLOB.Length.ToString());
byte[] buffer = new byte[actual];
//将BLOB字段内容读取到字节数组里面
BLOB.Read(buffer,0,actual);
//打开一个文件,如果没有则创建此文件
System.IO.FileStream mys = new FileStream(filePathName,System.IO.FileMode.OpenOrCreate);
//将读取到的内容写入到此文件中
mys.Write(buffer,0,buffer.Length);
//关闭此文件对象
mys.Close();
}
上述是将ORACLE数据库中的BLOB字段中的文件,生成到硬盘上的方法.你可再配合如下压缩解压缩代码,实现将生成到硬盘上的文件进一步解压缩即可.
/// <summary>
/// 调用DOS命令,注意多条DOS命令必须以|号隔开
/// </summary>
/// <param name= "argm "> 要操作的DOS命令 </param>
/// <returns> 返回取到的信息值 </returns>
static public string mycmd(string argm)
{
string myOutString = " ";
//开始创建文件
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.FileName = "cmd.exe ";
try
{
p.Start();
string[] ary = argm.Split( '| ');
for(int i=0;i <ary.Length;i++)
{
p.StandardInput.WriteLine(ary[i].ToString());
}
p.StandardInput.WriteLine( "exit ");
myOutString = p.StandardOutput.ReadToEnd();
p.Close();
}
catch(Exception ex)
{
throw new Exception (ex.Message);
}
return(myOutString);
}
调用命令:
mycmd( "rar a d:\\sql\\xxx.rar d:\\sql ");
如上即可实现.不过,你必须对你要操作的文件夹赋予aspnet用户修改的权限,否则无法执行.
读取Oracle大文件类型(BLOB)
最新推荐文章于 2024-07-25 17:32:44 发布