if you are using ODP.NET data provider from Oracle, seeManipulate Advertisements Sample - DML Operations for LOB Columns Through ODP.NET Using C#
http://otn.oracle.com/sample_code/tech/windows/odpnet/DSDRwithLOB/Readme.htmlotherwise, see Q316887 HOW TO: Read/Write File to/from BLOB Column w/ADO.NET & VB .NET
http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q316887This does true chunking using SQL Server-specific commands:
Q317034 HOW TO: Read/Write File to/from BLOB Column in ADO.NET & VB .NET
http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q317034This uses a DataSet:
Q308042 HOW TO: Read and Write BLOB Data by Using ADO.NET with VB .NET
http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q308042Various others: Q326502 HOW TO: Read and Write BLOB Data by Using ADO.NET Through ASP.NE
http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q326502 Q322796 HOW TO: Pass a BLOB as a Parameter to an Oracle Package
http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q322796 Q317670 HOW TO: Copy Picture from Database Directly to PictureBox in VB
http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q317670
http://otn.oracle.com/sample_code/tech/windows/odpnet/DSDRwithLOB/Readme.htmlotherwise, see Q316887 HOW TO: Read/Write File to/from BLOB Column w/ADO.NET & VB .NET
http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q316887This does true chunking using SQL Server-specific commands:
Q317034 HOW TO: Read/Write File to/from BLOB Column in ADO.NET & VB .NET
http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q317034This uses a DataSet:
Q308042 HOW TO: Read and Write BLOB Data by Using ADO.NET with VB .NET
http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q308042Various others: Q326502 HOW TO: Read and Write BLOB Data by Using ADO.NET Through ASP.NE
http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q326502 Q322796 HOW TO: Pass a BLOB as a Parameter to an Oracle Package
http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q322796 Q317670 HOW TO: Copy Picture from Database Directly to PictureBox in VB
http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q317670
解决方案 »
- 动态生成复选框问题。
- 求一个petshop的例子研究啊
- FCKeditor忽然无法正常显示
- asp.net如何判断SQL连接状态
- 网站挂马
- 关于一个在TEXTBOX中,属性设成多行后作为一个文本输入框的问题??在线等!!!!!!!!!!
- !php中怎样调用.NET生成的Web Service?
- asp.net中如何通过 WmiMonitorID查询显示器序列号?
- Jmail采用POP3收取QQ邮件连接超时
- 数据库oracle9.2,用oledb连接数据库时出现“未在本地计算机上注册“OraOLEDB.Oracle.1”提供程序。”怎样解决?
- 请问vb脚本和js脚本放在一起为什么总提示js脚本出错?
- ASP.net中调用Excel输出图片后Excel进程不能关闭的问题
========================
'本程序中相关Oracle的BLOB类型字段的读取
Imports System
Imports System.Configuration
Imports System.Io
Imports System.Text
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Data
Imports System.Data.OleDbPublic Class rule_doc
Inherits System.Web.UI.Page'=======================================
protected unit_name as label
Dim SQLSerch As String '查询字串
Dim Conn As String '连接字串
Dim SBGLConn AS OleDbConnection '创建连接对象
Dim SBGLComm As OleDbCommand '定义command对象
Dim SBGLRD As OleDbDataReader '定义oledbdatareader对象
Dim SBGLAd AS OledbDataAdapter '定义数据收集对象
Dim SBGLDs AS New DataSet '定义数据集对象
Dim SBGLDv AS New DataView '以下是对 BLOB 字段的处理过程
Dim File_Blob as FileStream '定义filestream类型的对象,blob数据类型视为字符流文件
Dim Bit_Blob as BinaryWriter '定义binarywrite类型的对象,用于存储读入的BLOB字符流,写成二进制形式的字符流
Dim BufferSize as integer = 100 '定义每次读取blob数据时的缓冲大小,取整数100字节
Dim Out_Byte (99) as Byte 'BLOB byte()被GetBytes方法填充的字节,BufferSize - 1 是该BYTE数据类型的上限 Dim Retval As Long ' 接受来自 GetBytes 方法的字符
Dim StartIndex As Long = 0 ' 定义 BLOB 输出的起点位置
Dim rule_id As String = "" ' 定义数据库当中的唯一标识,和数据库当中的rule_no对应
'=======================================
Sub Page_Load(Sender AS Object, e AS EventArgs)'初始化参数,OracleConn在web.config文件中配置,用于指定数据库连接字符串
'sqlstr字符串是 select * from TUHA.T_RULES order by rule_class ,要处理的BLOB字段是 RULE_CONTENT Conn = configurationsettings.appsettings("OracleConn")
SBGLConn = New OleDbConnection(Conn)
SBGLConn.Open() '打开链接
SQLSerch = "Select rule_no,rule_content from TUHA.T_RULES Order By Rule_Class"
SBGLComm = New OleDbCommand(SQLSerch,SBGLConn) '使用oledbcommand打开数据库,执行sql语句
SBGLRD = SBGLComm.ExecuteReader(CommandBehavior.SequentialAccess) '将sql执行结果写入SBGLRD对象中 Do While SBGLRD.Read()
rule_id = SBGLRD.GetString(0) '得到当前记录行的唯一标识,即取得rule_no字段的值
'创建一个文件,用于存放读出的内容,注意扩展名的用法
'构造函数FileStream(string,filemode,fileaccess),其中string="rule_no" & rule_id & ".doc"(文件名称),
'filemode= FileMode.OpenOrCreate(打开或创建文件方法),fileaccess= FileAccess.Write(文件访问的方法)
'生成文件
Dim path as String
Dim filename as String
'filename = "rule_no" & rule_id & ".doc"
'path = server.mappath(filename)
File_Blob = New FileStream(server.mappath("files\") & "rule_no" & rule_id & ".doc", FileMode.OpenOrCreate, FileAccess.Write)
Bit_Blob = New BinaryWriter(File_Blob)
'重新设置,准备下一次的重新读取blob内容
StartIndex = 0
' Read bytes into outbyte() and retain the number of bytes returned.
'response.write(startindex.tostring + ", " + out_byte.tostring + ", " + buffersize.tostring)
Retval = SBGLRD.GetBytes(1, StartIndex, Out_Byte, 0, BufferSize)
' Continue reading and writing while there are bytes beyond the size of the buffer.
Do While Retval = BufferSize
Bit_Blob.Write(Out_Byte)
Bit_Blob.Flush()
' Reposition the start index to the end of the last buffer and fill the buffer.
StartIndex = StartIndex + BufferSize
Retval = SBGLRD.GetBytes(1, StartIndex, Out_Byte, 0, BufferSize)
Loop
' 写到缓存中
Bit_Blob.Write(Out_Byte)
Bit_Blob.Flush()
' Close输出文件.
Bit_Blob.Close()
File_Blob.Close()
Loop SBGLRD.Close()
SBGLConn.Close()
End Sub
'=======================================
End Class
请打开vs.net的动态帮助“搜索”功能页框,输入:blob,搜索出的结果就有:
从数据库中读取blob数据类型的字段。
OleDbConnection myConntion = new OleDbConnection(strconnect);
myConntion.Open();
string sqlstr = "Select image From photo where xzbh = '"+ this.TextBox1.Text.Trim() +"'";
OleDbCommand cmd = new OleDbCommand(sqlstr,myConntion);
OleDbDataReader myReader = cmd.ExecuteReader(CommandBehavior.SequentialAccess);if(myReader.Read())
{
FileStream fs = new FileStream("c:\\1.jpg",FileMode.OpenOrCreate,FileAccess.Write);
BinaryWriter bw = new BinaryWriter(fs);
this.Image1.ImageUrl = @"c:\1.jpg";
OleDbDataReader myReader = cmd.ExecuteReader(CommandBehavior.SequentialAccess);
运行后报错说oracle不支持此接口,发生oracle错误,无法从oracle中检索信息,类型不支持
一种是microsoft提供的oracle连接ado.net的方式,
另一种是oracle提供的链接ado.net方式
请使用oracle提供的方式,我的连接oracle的ado.net方式如下(再web.config里)
<add key="OracleConn" value="Provider=OraOLEDB.Oracle.1;Password=tuha;Persist Security Info=True;User ID=tuha;Data Source=thequip" />
其中的provider=oraoledb.oracle.1——这就是oracle提供的连接ado.net的方式。
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Web;
using System.Web.Services;
using System.Data.OracleClient;
using System.Configuration;
using System.IO;namespace WebLeaf.News
{
/// <summary>
/// UpLoadManage 的摘要说明。
/// </summary>
public class UpLoadManage
{
//Sql字符串
private string strSql="";
//声明调用的数据管理类
//private BaseClass.DbManager dbMgr;
//数据库连接字符串
protected static string strConn = ConfigurationSettings.AppSettings["strConnection"];
protected OracleConnection objConn; public UpLoadManage()
{
//
// TODO: 在此处添加构造函数逻辑
//
} /// <summary>
/// 接受三个参数,文件名,文件解说描述,流对象, 然后把流读入数组,写入数据库。
/// </summary>
/// <param name="id">图片编码</param>
/// <param name="SourceFilePath">图片名</param>
/// <param name="FileType">图片文件类型</param>
/// <param name="explain">描述</param>
/// <param name="b">流对象(转成byte[])</param>
/// <returns></returns>
public string FileUp(int id,string SourceFilePath,string FileType,string explain,byte[] b)
{
string fileName="";
string sResult="ok";
objConn = new OracleConnection(strConn); try
{
fileName=System.IO.Path.GetFileName(SourceFilePath);
int FileLen=Int32.Parse(b.Length.ToString());
if(FileLen<1)
{
return "文件不能为空!";
}
else if(FileLen>=10240000)//10M
{
return "文件超长,限制大于10M!";
}
// Byte[] b=new Byte[FileLen];
// fs.Read(b,0,b.Length);
// fs.Close();
OracleLob objLob;
objConn.Open();
OracleTransaction tx=objConn.BeginTransaction();
OracleCommand cmd=new OracleCommand();
cmd=new OracleCommand("declare xx blob; begin dbms_lob.createtemporary(xx, false, 0); :tempblob := xx; end;",objConn,tx);
OracleParameter p1=cmd.Parameters.Add("tempblob", OracleType.Blob);
p1.Direction=ParameterDirection.Output; cmd.ExecuteNonQuery();
objLob=((System.Data.OracleClient.OracleLob)(((System.Object)(p1.Value))));
objLob.BeginBatch(OracleLobOpenMode.ReadWrite);
objLob.Write(b, 0, b.Length);
objLob.EndBatch();
objLob.Position=0; cmd.Parameters.Clear(); strSql = "insert into newspic (picid,ori_type,bindata,description) values ("+id+",'"+FileType+"',:FileData,'"+explain+"')";
OracleCommand objCmd=new OracleCommand(strSql,objConn);
objCmd.Transaction=tx;
objCmd.Parameters.Add(new OracleParameter("FileData",OracleType.Blob)).Value=objLob;
objCmd.ExecuteNonQuery();
tx.Commit();
}
catch(OracleException ex)
{
sResult=ex.Message.ToString();
}
finally
{
objConn.Close();
}
return sResult;
}
/// <summary>
/// 删除序号为id的数据行(文件)
/// </summary>
/// <param name="id">文件编码</param>
/// <returns>成功 ok,失败返回 fail reason.</returns>
public string FileDelete(int id)
{
string sResult="ok";
objConn = new OracleConnection(strConn);
try
{
OracleCommand objCmd=new OracleCommand("delete from newspic where id="+id,objConn);
objConn.Open();
int num=objCmd.ExecuteNonQuery();
if(num<1)
{
sResult="没有给定编号的信息!";
}
}
catch(OracleException ex)
{
sResult=ex.Message.ToString();
}
finally
{
objConn.Close();
}
return sResult;
}
/// <summary>
/// 获取一个文件
/// </summary>
/// <param name="series">文件序号</param>
/// <returns></returns>
public DataSet GetOneFile(int id)
{
objConn = new OracleConnection(strConn);
DataSet ds = new DataSet();
try
{
objConn.Open();
strSql="select * from newspic where id = "+id;
OracleDataAdapter objAdapter= new OracleDataAdapter(strSql,objConn);
objAdapter.Fill(ds, "files");
}
catch(OracleException ex)
{
throw new Exception(ex.Message);
}
finally
{
objConn.Close();
}
return ds;
} /// <summary>
/// 获取文件
/// </summary>
/// <returns></returns>
public DataSet GetFiles()
{
objConn = new OracleConnection(strConn);
DataSet ds = new DataSet(); try
{
strSql="select * from newspic";
OracleDataAdapter objAdapter= new OracleDataAdapter(strSql,objConn);
objAdapter.Fill(ds, "files");
}
catch(OracleException ex)
{
throw new Exception(ex.Message);
}
finally
{
objConn.Close();
}
return ds;
}
}
}