我想把一个Wrod文件上传到数据库保存起来,请教数据库要设成什么类型,用什么方法把Wrod文件保存到数据库呢?然后还有上传要怎么样上传,用什么函数来上传呢,能具体写出的给高分

解决方案 »

  1.   

    http://sz.luohuedu.net/xml/ShowDetail.asp?id=EY1XLDYV-PIDF-43LO-1WFL-FMY5ALE1F635
      

  2.   

    public void creatNewFile(string strNodeId,HtmlInputFile file,string description,string userId)
    {
    Stream imgdatastream = file.PostedFile.InputStream;
    string fileName = System.IO.Path.GetFileName(file.PostedFile.FileName).Trim();
    int imgdatalen = file.PostedFile.ContentLength;
    string imgtype = file.PostedFile.ContentType;
    byte[] imgdata = new byte[imgdatalen];
    int n = imgdatastream.Read(imgdata,0,imgdatalen);
    DataBase db = new  DataBase();
    DataSet ds ;
    db.Open();

    // check DB
    string  sqlcheck  = " SELECT * FROM T_DMS_DOC ";
    sqlcheck += " WHERE NodeId  = '"+ DataBase.SqlItemTextChange(strNodeId) +"'";
    sqlcheck += " AND   DocName = '"+ DataBase.SqlItemTextChange(fileName) +"'";
    sqlcheck += " AND   DelStatus = 0"; // not deleted

    db.ExecSQL(sqlcheck,"T_DMS_DOC",out ds); if(ds.Tables.Count!= 0 && ds.Tables[0].Rows.Count !=0)
    {
    throw new Exception("1011");
    }

    // Get Document ID
    double randomStr = new System.Random().NextDouble()* 1000000000;
    string docID = DateTime.Now.ToString("yyyyMMdd") + (Math.Floor(randomStr)).ToString(); // Insert File to DB
    string sql  = " INSERT INTO T_DMS_DOC (NodeId,DocId,Version,DocName,Content,Description,UpdDate,UpdUid,CheckOut,DelStatus) ";
    sql += " VALUES( '"+ DataBase.SqlItemTextChange(strNodeId) +"','"+docID+"',1,'"+DataBase.SqlItemTextChange(fileName) +"',@imgdata,'"+DataBase.SqlItemTextChange(description)+"',GETDATE(),'"+DataBase.SqlItemTextChange(userId)+"',"+"'0','0')" ; SqlCommand command = new SqlCommand(sql,db.Connection ); SqlParameter paramData = new SqlParameter( "@imgdata", SqlDbType.Image );
    paramData.Value = imgdata;
    command.Parameters.Add( paramData ); try
    {
    // db.BeginTrans();
    // Write Log
    LogManager.WriteLog("Execute  "+command.CommandText); int numRowsAffected = command.ExecuteNonQuery(); if(numRowsAffected !=1)
    {
    throw new Exception("1012");
    } LogManager.WriteLog("Success"); //db.CommitTrans();
    }
    catch(Exception ex)
    {
    LogManager.WriteLog("Failure  "+ ex.Message);
    db.RollBack();
    throw ex;
    }
    finally
    {
    db.Close();
    }
    }
    public void downloadFile(HttpRequest reqst,HttpResponse respon, HttpServerUtility server ,  string userId,string nodeId,string docId,string version,bool isCheckOut)
    {
    DataBase db = null;
    System.IO.FileStream myFile = null;
    //BinaryReader br = null;
    respon.Clear(); try
    {
    db= new DataBase();
    db.Open(); // Check the File
    this.checkFileExisted( db.Connection , null , nodeId , docId , null );
    }
    catch( ApplicationException ex )
    {
    throw ex;
    }
    catch( Exception ex )
    {
    throw ex;
    }
    finally
    {
    db.Close();
    } try
    {
    db= new DataBase();
    db.Open(); // DownLoad File
    string  sqlText  = " SELECT DocName, Content ";
    sqlText += " FROM   T_DMS_DOC ";
    sqlText += " WHERE  NodeId  ='"+DataBase.SqlItemTextChange(nodeId)+"' ";
    sqlText += " AND    DocId   ='"+DataBase.SqlItemTextChange(docId)+"' ";
    sqlText += " AND    Version ='"+DataBase.SqlItemTextChange(version)+"' ";

    SqlCommand cmd=new SqlCommand(sqlText,db.Connection);
    SqlDataReader rd;
                
    // Write Log
    LogManager.WriteLog("Execute  "+cmd.CommandText);
    rd=cmd.ExecuteReader(); while(rd.Read())
    {
    // Orginal File Name
    string fileName = rd["DocName"].ToString(); // Temp File Name with server path
    string ServerPath = server.MapPath("TempFile"); // Delete temp , if existed
    if(File.Exists(ServerPath))
    {
    File.Delete(ServerPath);
    } // Get File from database
    myFile = new System.IO.FileStream(ServerPath,System.IO.FileMode.Create);
    myFile.Write(((byte[])rd["Content"]),0,((byte[])rd["Content"]).Length); #region New Source
    // Write file into harddisk
    StreamWriter swMyFile = new StreamWriter( myFile ) ;
    swMyFile.WriteLine("") ;
    swMyFile.Flush() ;
    swMyFile.Close() ;
    myFile.Close() ; // Get Temp File info
    FileInfo fi = new FileInfo(ServerPath); // determine the name and size of the file
    string filename = fi.Name;
    string filesize = fi.Length.ToString();
    fi = null; // clear the response, set the contenttype and the file name/size
    respon.Clear();
    respon.ContentType = "application/octet-stream";
    respon.AppendHeader("Content-Disposition", "attachment; filename=" + server.UrlEncode(fileName) + @"");
    respon.AppendHeader ("Content-Length", filesize);  // flush the response, then send the file down
    respon.Flush();
    respon.WriteFile(ServerPath);
    #endregion #region Old Source
    // br = new BinaryReader(myFile);
    //
    // //respon.Clear();
    // respon.AddHeader("Accept-Ranges", "bytes");
    // respon.Buffer = false;
    // long fileLength = myFile.Length;
    // long startBytes = 0;
    //     
    // int pack = 10240; //10K bytes
    // //int sleep = 200;   
    // int sleep = (int)Math.Floor(1000 * pack / 1048576) + 1;
    // if (reqst.Headers["Range"] != null)
    // {
    // respon.StatusCode = 206;
    // string[] range = reqst.Headers["Range"].Split(new char[] {'=', '-'});
    // startBytes = Convert.ToInt64(range[1]);
    // }
    // respon.AddHeader("Content-Length", (fileLength - startBytes).ToString());
    // if (startBytes != 0)
    // {
    // respon.AddHeader("Content-Range", string.Format(" bytes {0}-{1}/{2}", startBytes, fileLength-1, fileLength));
    // }
    //
    // respon.AddHeader("Connection", "Keep-Alive");
    // respon.ContentType = "application/octet-stream";
    // respon.AddHeader("Content-Disposition","attachment;filename=" + HttpUtility.UrlEncode(fileName,System.Text.Encoding.UTF8).Replace("+"," ") );
    // 
    // br.BaseStream.Seek(startBytes, SeekOrigin.Begin);
    // int maxCount = (int) Math.Floor((fileLength - startBytes) / pack) + 1;
    //
    // respon.Flush();
    //
    // for (int i = 0; i < maxCount; i++)
    // {
    // if (respon.IsClientConnected)
    // {
    // respon.BinaryWrite(br.ReadBytes(pack));
    // Thread.Sleep(sleep);
    // }
    // else
    // {
    // i=maxCount; 
    // }
    // }
    //
    // br.Close();
    // myFile.Close();
    #endregion
    } rd.Close();
    db.Close();
    }
    catch(ApplicationException ex)
    {
    throw ex;
    }
    catch(Exception ex)
    {
    throw ex;
    }
    finally
    {
    // db.Close();
    respon.End();
    }

    }