我们可以把任意类型的文件保存到SQL Server中,在进行例子之前,先建立测试用表格,TestFile.sql:

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TestFiles]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[TestFiles] GO CREATE TABLE [dbo].[TestFiles] ( [id] [int] IDENTITY (1, 1) NOT NULL , [MyFileName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL , [FileType] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL , [MyFile] [image] NOT NULL ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO

下面创建上传表单:

一旦提交了表单,我们使用HtmlInputFile类的PostedFile属性来访问我们上载的文件,用HttpPostedFile类的属性和方法来进行读取、保存上载文件和得到上载文件的其它信息。这里我们不使用SaveAs方法,因为它是用来保存文件的。我们要把数据保存到数据库中,我们使用InputStream属性,它用来初始化流来读取我们的数据。同时,我们使用ContentLength来读取文件大小,ContentType读取文件类型。然后创建byte数组,把文件流保存进该数组,然后保存到数据库即可。

下面就是完整的代码【CS版本】UploadFile.aspx:

<% @Page Language="C#" %> <% @Import Namespace="System.IO" %> <% @ Import Namespace="System.Data" %> <% @ Import Namespace="System.Data.SqlClient" %> <script runat="server"> public void UploadBtn_Click (Object sender, EventArgs e){ //得到提交的文件 Stream fileDataStream = MyFile.PostedFile.InputStream; //得到文件大小 int fileLength = MyFile.PostedFile.ContentLength; //创建数组 byte[] fileData = new byte[fileLength]; //把文件流填充到数组 fileDataStream.Read(fileData,0,fileLength); //得到文件名字 string fileTitle = MyFileName.Value; //得到文件类型 string fileType = MyFile.PostedFile.ContentType; //构建数据库连接,SQL语句,创建参数 SqlConnection connection = new SqlConnection("Server=.;uid=sa;pwd=;Database=TestUploadFile"); SqlCommand command = new SqlCommand ("INSERT INTO TestFiles (MyFileName,MyFile,FileType)" + "VALUES (@MyFileName,@MyFile,@FileType)", connection); SqlParameter paramTitle = new SqlParameter ("@MyFileName", SqlDbType.VarChar,35); paramTitle.Value = fileTitle; command.Parameters.Add(paramTitle); SqlParameter paramData = new SqlParameter ("@MyFile", SqlDbType.Image); paramData.Value = fileData; command.Parameters.Add(paramData); SqlParameter paramType = new SqlParameter ("@FileType", SqlDbType.VarChar,25); paramType.Value = fileType; command.Parameters.Add(paramType); //打开连接,执行查询 connection.Open(); command.ExecuteNonQuery(); connection.Close(); Message.Text="你的文件已经成功上载"; MyFileName.Value = ""; } </script> <hr /> <asp:label id="Message" Text="选择文件和文件名字:" runat="server"/> <hr /> <form method="post" enctype="multipart/form-data" runat="server"> <b>文件名字:</b><input id="MyFileName" type="text" runat="server"> <p> <b>文件:</b><input id="MyFile" type="file" runat="server"> <br /><br /> <input type="submit" value="开始上传" onserverclick="UploadBtn_Click" runat="server"> </form>

一旦我们上载成功,我们可以对文件进行浏览:只需要设置页面的MIME类型,然后用Response对象的BinaryWrite()进行输出。

ShowUploadFile.aspx

<% @Page Language="C#" %> <% @Import Namespace="System.IO" %> <% @ Import Namespace="System.Data" %> <% @ Import Namespace="System.Data.SqlClient" %> <script runat="server"> private void Page_Load(Object sender, EventArgs e) { string sql="SELECT * FROM TestFiles"; SqlConnection connection = new SqlConnection("Server=.;uid=sa;pwd=;Database=TestUploadFile"); SqlCommand command = new SqlCommand(sql, connection); connection.Open(); FileList.DataSource = command.ExecuteReader(); FileList.DataBind(); connection.Close(); } </script> <form runat="server"> <asp:DataGrid id="FileList" runat="server" BorderColor="orange" BorderWidth="2" CellPadding="4" AutoGenerateColumns="false" ShowHeader="true" Align="center"> <headerstyle bordercolor="White" backcolor="black" forecolor="White" font-size="9" horizontalalign="Center"> <columns> <asp:TemplateColumn HeaderText="文件名字"> <itemtemplate> <b> <%# DataBinder.Eval(Container.DataItem, "MyFileName") %> </b> </itemtemplate> </asp:TemplateColumn> <asp:TemplateColumn HeaderText="类型"> <itemtemplate> <b> <%# DataBinder.Eval(Container.DataItem, "FileType") %> </b> </itemtemplate> </asp:TemplateColumn> <asp:TemplateColumn HeaderText="查看"> <itemtemplate> <b> <a href="" rel="nofollow" databinder="">">查看文件</a> </b> </itemtemplate> </asp:TemplateColumn> </columns> </asp:DataGrid> </form>

ShowFile.aspx

<% @Page Language="C#" %> <% @Import Namespace="System.IO" %> <% @ Import Namespace="System.Data" %> <% @ Import Namespace="System.Data.SqlClient" %> <script runat="server"> private void Page_Load(Object sender, EventArgs e) { string sql="SELECT * FROM TestFiles WHERE ID = '" + Request.QueryString["ID"] + "'"; SqlConnection connection = new SqlConnection("Server=.;uid=sa;pwd=;Database=TestUploadFile"); SqlCommand command = new SqlCommand(sql, connection); connection.Open(); SqlDataReader dr = command.ExecuteReader(); if(dr.Read()){ Response.Clear(); Response.AddHeader("Content-Type",dr["FileType"].ToString()); Response.BinaryWrite((byte[])dr["MyFile"]); } dr.Close(); connection.Close(); } </script>

另外需要注意的是:对exe,zip文件等还要进一步进行处理,以直接进行下载。

在SQL Server中保存和输出任意类型的文件相关推荐

  1. Sql Server 中利用游标对table 的数据进行分组统计式输出…

    Sql Server 中利用游标对table 的数据进行分组统计式输出- Table Name: Tb_Color Create table Tb_Color(id int identity(1,1) ...

  2. 十步优化SQL Server中的数据访问

    故事开篇:你和你的团队经过不懈努力,终于使网站成功上线,刚开始时,注册用户较少,网站性能表现不错,但随着注册用户的增多,访问速度开始变慢,一些用户开始发来邮件表示抗议,事情变得越来越糟,为了留住用户, ...

  3. SQL Server中读取XML文件的简单做法

    SQL Server 2000使得以XML导出数据变得更加简单,但在SQL Server 2000中导入XML数据并对其进行处理则有些麻烦.本文介绍在SQL Server中读取XML文件的简单做法. ...

  4. SQL Server中常用的SQL语句

    1.概述 2.查询概述 3.单表查询 4.连接查询 5.带有exists的相关子查询 6.SQL的集合操作 7.插入操作 8.删除操作 9.修改操作 10.数据定义 11.视图 1.概述 名词 笛卡尔 ...

  5. 细说Sql Server中的视图(下)转载

    原文:细说Sql Server中的视图(下)http://www.cnblogs.com/xbf321/archive/2009/06/19/view_two_in_sqlserver.html 1, ...

  6. SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别

    SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别 原文:SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别 MSSQL为我们提供了两种动态执行SQL语 ...

  7. SQL Server 中 JSON_MODIFY 的使用

    SQL Server 中 JSON_MODIFY 的使用 Intro SQL Server 从 2016 开始支持了一些 JSON操作,最近的项目里也是好多地方直接用字段直接存成了 JSON,需要了解 ...

  8. SQL Server中关于跟踪(Trace)那点事(转载)

    前言 一提到跟踪俩字,很多人想到警匪片中的场景,同样在我们的SQL Server数据库中"跟踪"也是无处不在的,如果我们利用好了跟踪技巧,就可以针对某些特定的场景做定向分析,找出充 ...

  9. cte公用表表达式_CTE SQL删除; 在SQL Server中删除具有公用表表达式的数据时的注意事项

    cte公用表表达式 In this article, the latest in our series on Common table expressions, we'll review CTE SQ ...

最新文章

  1. DCN-2655 gre隧道 vpn 嵌入IPSec配置:
  2. 程序架构探讨—007 应用服务器集群的伸缩性之链路负载均衡
  3. 自考c语言程序设计,自考“C语言程序设计”模拟试题八
  4. CF720C Homework(构造)(暴力)
  5. java io顺序_Java顺序IO性能
  6. 计算机视觉论文-2021-06-29
  7. 【从C到C++学习笔记】内联成员函数/成员函数重载及缺省参数
  8. 天锐绿盾防泄密软件新功能二期优化预告
  9. 统计学怎么求加权指数_统计学——指数
  10. java jave_jave是什么意思
  11. 从微软和思科的 IT 服务化转型过程中得到的几点思考
  12. web调用qq临时会话
  13. QT软件开发:基于libVLC内核设计视频播放器
  14. 学习《医学三字经白话解》之隔食反胃(吞咽梗阻)
  15. 如何在iPhone上禁用Apple CarPlay
  16. Centos7 下配置Samba服务器---犯二的经历
  17. 在OpenCV里实现直方图反向投影算法
  18. 机器学习之二十一(读书笔记)
  19. java后端研发经典面试题总结二
  20. Homestead 安装 phpMyAdmin 作为数据库管理客户端 — Laravel 实战 果酱 API 教程

热门文章

  1. Windows下修改jupyter默认工作路径教程
  2. hibernate连接mysql数据库步骤_Hibernate (操作步骤)
  3. 有java基础的人学python_准备自学Python ,会java,有什么建议吗?
  4. visual studio spy使用实现后台按键_多种精华液应该如何叠加使用?
  5. 在Ubuntu 16.04.3 LTS上运行go+https+json示例
  6. 在VirtualBox 5.0.12 for Linux版本上安装CentOS 6.6 x86_64系统
  7. Tafficserver旁路接入方案综述
  8. 递归/回溯:Combination Sum II数组之和
  9. s-stat 查看文件或者文件系统的状态信息
  10. apt Could not get lock /var/lib/dpkg/lock 解决方案