将文档以二进制格式写进数据库,读出显示

一个文档以二进制的格式写进数据库需要有以下三步:

为读写二进制的字段插入一个空指针:
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;
  }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值