学院首页 软件应用 编程开发 创意设计 认证培训 软件论坛
ASP ASP.NET PHP JSP SQL MYSQL Java VB

您的位置:学院 >> 编程开发 >> ASPNET >> ASP.NET中上传文件到数据库


ASP.NET中上传文件到数据库


  数据表结构

  现在,我们来看存放文件的数据库表结构,这里,我们给出建立表的标准SQL语句:

CREATE TABLE tblBooksUpload
(
 DocID int NOT NULL IDENTITY Primary Key ,
 DocTitle varchar (200) ,
 Doc image,
 DocType varchar (50) ,
 Entrydate datetime Default GetDate()
)

  以上的语句中,我们看到数据表tblBooksUpload包含五个字段:

  ·字段DocID是表的关键字段,数据记录编号;

  ·字段DocTitle是用来简单说明上传文件的,如果上传文本文件,我们一般将其设置为文件标题,图像、程序等,就设置为图像、程序的简单介绍;

  ·字段Doc是用来存放我们上传的文件的字段,注意,这里将Doc字段的设置为Image类别;

  ·字段DocType用来保存我们上传文件的类型,可能我们奇怪为什么要这个字段呢?其实,这个字段是很重要的,在用户从数据库取得数据的时候,这个字段将用来指定数据字段Doc中数据的类别,然后,浏览器根据这个字段来决定呈现给用户的数据;

  ·字段DateTime是一个时间字段,我们可以看到该字段的值取自服务器的当前日期。

  下面是插入数据的存储过程,我们来看具体代码:

CREATE PROCEDURE uSP_BooksUploadFile
@Title varchar(200),
@Doc image,
@DocType varchar(4)

AS

INSERT tblBooksUpload(DocTitle,Doc,DocType)
VALUES (@Title,@Doc,@DocType)

GO

  上传文件的步骤

  现在,我们先从文字上了解一下上传文件到数据库的具体步骤,再从代码上来实现:

  首先,从客户端取得上传的文件,然后,我们将它放入数据流;

  第二,服务器端读取数据流,然后将其保存到缓存;

  第三,将缓存数据保存到数据库;

  现在,我们一步步来看怎样在程序中实现这些功能。

  第一步

  当然,首先我们要实现用户在浏览器端自由选择文件,然后上传,这里用户选择文件,当然是要求标准的Windows方式,所以,我们在这里使用Form的File文件组件来给用户选择文件。注意,因为上传文件,所以,在Form的属性设置的时候,我们应该设置为:multipart/form-data,这样,才可以正确上传文件。下面是上传页面的主要代码:

<form id="frmUpload" method="post" enctype="multipart/form-data" runat="server">
<span>Title</span><br>
<asp:textbox id="txtTitle" runat="server" EnableViewState="False"></asp:textbox>
<asp:requiredfieldvalidator id="valrTitle" runat="server" ErrorMessage="*
Required" ControlToValidate="txtTitle">* Required</asp:requiredfieldvalidator>

<br>
<br>

<span>Docutment to Upload</span><br>
<input id="txtFileContents" type="file" runat="server" NAME="txtFileContents">
<br>
<br>

<asp:button id="btnSubmit" Text="Submit" Runat="server"></asp:button>
</form>


  第二步

  我们可以将上传的文件通过数据流保存到缓存,缓存的大小和文件的具体大小相同,我们可以使用以下的代码来取得文件的具体大小:

int intDocLen = txtFileContents.PostedFile.ContentLength;

  然后,我们可以设置缓存的具体大小了:
  
byte[] Docbuffer = new byte[intDoclen];

  这样设置以后,我们可以将上传文件的内容保存到缓存中:
  
Stream objStream;
objStream = txtFileContents.PostedFile.InputStream;
objStream.Read(Docbuffer,0,intDocLen);

  在以上代码中,读取缓存的时候,从缓存的0位置开始,直到整个文件的长度,其实,这就是整个文件或者整个缓存的大小。

  第三步

  现在我们需要做的就是将缓存数据保存到数据库,我们已经直到数据表结构,这样,我们通过编写简单的SQL语句就可以实现这个功能。在上面的内容中,我们编写了一个存储过程,在程序中,我们只要建立SqlCommand对象并且将这个存储过程传递给它,并设置“@Doc”参数取得缓存数据就可以了:

cmdUploadDoc = new SqlCommand("uSP_BooksUploadFile",BooksConn);
cmdUploadDoc.CommandType = CommandType.StoredProcedure;
cmdUploadDoc.Parameters.Add("@Title ",SqlDbType.VarChar,200);
cmdUploadDoc.Parameters.Add("@Doc",SqlDbType.Image);
cmdUploadDoc.Parameters.Add("@DocType",SqlDbType.VarChar,4);

cmdUploadDoc.Parameters[0].Value = txtTitle.Text;
cmdUploadDoc.Parameters[1].Value = Docbuffer;
cmdUploadDoc.Parameters[2].Value = strDocType;

  点击按钮处理代码

private void btnSubmit_Click(object sender, System.EventArgs e)
{
 string strDocExt;
 //strDocType用于保存上传文件的类型
 string strDocType;

 //用于保存文件大小

 int intDocLen;

 //Stream用于读取上传数据

 Stream objStream;
 SqlConnection BooksConn;
 SqlCommand cmdUploadDoc;

 if(IsValid)
 {
  if(txtFileContents.PostedFile != null)
  {
   //文件类型
   strDocExt = CString.Right(txtFileContents.PostedFile.FileName,4).ToLower();
   switch(strDocExt)
   {
    case ".doc":
     strDocType = "doc";
     break;
    case ".ppt":
     strDocType = "ppt";
     break;
    case ".htm":
     strDocType = "htm";
     break;
    case ".html":
     strDocType = "htm";
     break;
    case ".jpg":
     strDocType = "jpg";
     break;
    case ".gif":
     strDocType = "gif";
     break;
    default:
     strDocType = "txt";
     break;
   }
   //上传文件具体内容
   intDocLen = txtFileContents.PostedFile.ContentLength;
   byte[] Docbuffer = new byte[intDocLen];
   objStream = txtFileContents.PostedFile.InputStream;

   //文件保存到缓存
   //缓存将保存到数据库

   objStream.Read(Docbuffer ,0,intDocLen);
   BooksConn = new SqlConnection("Server=Server;UID=sa;Database=Books");
   cmdUploadDoc = new SqlCommand("uSP_BooksUploadFile",BooksConn);
   cmdUploadDoc.CommandType = CommandType.StoredProcedure;
   cmdUploadDoc.Parameters.Add("@Title ",SqlDbType.VarChar,200);
   cmdUploadDoc.Parameters.Add("@Doc",SqlDbType.Image);
   cmdUploadDoc.Parameters.Add("@DocType",SqlDbType.VarChar,4);
   cmdUploadDoc.Parameters[0].Value = txtTitle.Text;
   cmdUploadDoc.Parameters[1].Value = Docbuffer ;
   cmdUploadDoc.Parameters[2].Value = strDocType;
   BooksConn.Open();
   cmdUploadDoc.ExecuteNonQuery();
   BooksConn.Close();
  }
 }
}

  总结

  以上我们提到的方法,适合所有类型的文件,对以上代码作适当修改,我们就可以建立一个完全基于数据库的文件管理系统。 

技术文章快速查找

栏目导航
软件应用
·操作系统 ·杀毒防黑 ·应用软件
·聊天软件 ·网络软件  
Web开发
·ASP ·JavaScript ·CGI
·JSP ·VbScript ·Web服务器
·PHP ·XML  
开发语言
·VB ·VC ·ASP.NET
·Java ·C/C++ ·Delphi
数据库开发
·MySQL ·SQL/Access ·PowerBuilder
·Oracle ·DB2  
网站设计
·Flash ·Dreamweaver ·HTML/CSS
·Fireworks ·FrontPage  
平面设计
·Photoshop ·CorelDraw ·AutoCAD
·FreeHand ·Illustrator ·3DsMAX
媒体动画
·Director ·Authorware ·Maya
·视频处理    


相关软件 产品库推荐
·笔记本 ·台式机 ·服务器
·数码相机 ·手机 ·GPS
·DV摄像机 ·MP3 ·MP4
·CPU ·硬盘 ·内存
·主板 ·显卡 ·显示器
·打印机 ·投影机 ·路由器

还没人留言,抢个先,哈哈!
对"ASP.NET中上传文件到数据库"的评论 - 快速回贴
内容:
  [完成后可按Ctrl+Enter发布]

百度中 ASP.NET中上传文件到数据库 相关内容
Google搜索中 ASP.NET中上传文件到数据库 相关内容
雅虎中 ASP.NET中上传文件到数据库 相关内容
Sogou搜索中 ASP.NET中上传文件到数据库 相关内容

相关软件 最新回复帖子:

·Windows Vista 中卸载软件的不同方式
·没有mysql支持时的替代方案
·一个可以发送附件及HTML格式邮件的PHP类
·AutoCAD打造精致三维鸟笼实例详解
·Photoshop自定义水晶字特效样式
·AutoCAD三维基础实例教程
·PS为黑背景长发美女照片抠图换背
·用Photoshop自制个性摩托车贴花小经验
·轻松几步将美女照片处理为手工素描
·巧用Photoshop画笔轻松绘制创意特效


  相关软件 ASP.NET中上传文件到数据库相关文章
在ASP.NET AJAX中别使用mode 探讨ASP.NET 2.0的Web控件改进之概述
ASP.NET实现投票结果的图片进度条显示 ASP.NET 2.0高级数据处理之处理控件事件
ASP.NET 2.0高级数据处理之主从数据表 ASP.NET 2.0高级数据处理之处理Null值
ASP.NET2.0+VS2005利器大评析之优点篇 ASP.NET中如何防范SQL注入式攻击
ASP.NET 2.0发送电子邮件中存在的问题 ASP.NET 2.0中层次数据的处理
ASP.NET 2.0的全球化与本地化之全球化 ASP.NET2.0中的全球化与本地化之本地化
在ASP.NET中使用AJAX的简单方法 轻松加密ASP.NET 2.0 Web程序配置信息
ASP.NET 2.0页面性能的考虑 ASP.NET 2.0打造购物车和支付系统之二
ASP.NET 2.0移动开发之设备筛选器的应用 深入Atlas系列之客户端支持
ASP.NET 2.0打造购物车和支付系统之一 ASP.NET 2.0程序安全的基础知识