一个文档以二进制的格式写进数据库需要有以下三步:
为读写二进制的字段插入一个空指针:
insert into docinfo(ID,DOCID,DOCNAME,DOCDIR,DOCBODY) values('1','1','技术监督工作安排','C:/',EMPTY_BLOB())
select id from docinfo for update;
update docinfo set DOCBODY=:f where id=?
select docbody from docinfo for update nowait;
select DBMS_LOB.GETLENGTH(docbody) from docinfo
------------------------------------------------成功上传文件的代码----------------------------------------------------------------------------
public bool AddAnnexToDataBase(System.Web.UI.WebControls.DataGrid dgForAnnex,System.Web.UI.HtmlControls.HtmlInputFile File1,int intID)
{
Stream stream = File1.PostedFile.InputStream;
long length = File1.PostedFile.InputStream.Length;
byte[] date = new byte[length];
stream.Read(date,0,Convert.ToInt32(length));
bool flag=false;
string file_name =System.IO.Path.GetFileName(File1.PostedFile.FileName);
string fileFrom=File1.PostedFile.FileName;
string file_dir=System.IO.Path.GetPathRoot(File1.PostedFile.FileName);
string strDate=System.DateTime.Now.ToString();
int NewID=this.GetMaxId()+1;
string sreSql_Annex_Insert=" INSERT INTO DOCINFO (ID, DOCID, DOCNAME, DOCDIR, DOCBODY,DOCDATE) VALUES ( '"+intID+"','"+NewID+"','"+file_name+"','"+file_dir+"',:fs, '"+strDate+"')";
// FileStream fs = new FileStream(fileFrom, FileMode.OpenOrCreate, FileAccess.Read);
if(conn.State!=ConnectionState.Open)
{
conn.Open();
}
System.Data.OracleClient.OracleTransaction trans=conn.BeginTransaction();
//byte[] MyData= new byte[fs.Length];
//fs.Read(MyData, 0, System.Convert.ToInt32(fs.Length));
try
{
cmd_Add = new OracleCommand(sreSql_Annex_Insert,conn,trans);
OracleParameter opara = new OracleParameter("fs",OracleType.Blob);
// opara.Value = MyData;
opara.Value = date;
cmd_Add.Parameters.Add(opara);
cmd_Add.ExecuteNonQuery();
trans.Commit();
flag=true;
}
catch(Exception e1)
{
string strErr=e1.Message;
trans.Rollback();
flag=false;
}
finally
{
//fs.Close();
conn.Close();
}
return flag;
}
------------------------------------------------成功打开文件的代码----------------------------------------------------------------------------
public bool AnnexView(System.Web.UI.WebControls.DataGrid dgForAnnex)
{
if(conn.State!=ConnectionState.Open)
{
conn.Open();
}
System.Web.HttpResponse Response=System.Web.HttpContext.Current.Response;
bool flag=false;
ds.Clear();
//取得文档编号
int INTDOCID=Convert.ToInt32(dgForAnnex.SelectedItem.Cells[0].Text);
string strSql_Annex_Select="SELECT ID, DOCID ,DOCNAME, DOCDIR, DOCBODY, DOCDATE FROM DOCINFO WHERE DOCID='"+INTDOCID+"'";
da = new OracleDataAdapter();
cmd_Select = new OracleCommand(strSql_Annex_Select,conn);
try
{
da.SelectCommand = cmd_Select;
da.Fill(ds);
//声明字节数组,为从数据库读取二进制文档做准备
byte[] img = new byte[0];
DataRow dr;
dr = ds.Tables[0].Rows[0];
if (!ds.Tables[0].Rows[0]["DOCBODY"].ToString().Equals(""))
{
//处理编码
string FileName = System.Web.HttpUtility.UrlEncode(System.Text.Encoding.UTF8.GetBytes(dr["DOCNAME"].ToString()));
//定义文档的查看方式-----在线?下载到本地
Response.AddHeader( "Content-Type","application/x-download");
Response.AddHeader("Content-Disposition", "attachment;filename=" + FileName);
//赋值
img = (byte[])dr["DOCBODY"];
}
//还原原文件
Response.BinaryWrite (img);
Response.End();
flag=true;
}
catch(Exception e)
{
string str=e.Message;
flag=false;
conn.Close();
}
finally
{
conn.Close();
}
return flag;
}