在ASP.NET中将图片存储到Sql Server数据库中
http://hi.baidu.com/rayshow/blog/item/360e8ff9662c8b5a252df268.html

索引:图片   存储     Sql Server数据库

进行Web开发时,时常需要上传图片,许多前辈及经验都告诉我们应该上传到一个目录,将地址写如数据库云云,无可否认这是通用的方法,并且容易维护。但有时我们仍然需要将图片存储到数据库中,也许就是为了安全。

在这篇文章中,我们将通过一个示例来说明将图片存储到sql server 2005中的方法及过程。
1:创建aspx页面。

在这一步,我们需要一个FileUpload控件,同时最重要的是需要将Form的enctype属性设置为multipart/form-data。该FileUpload控件ID为:fileuploadPic。其HTML源码如下所示:
<form id="form1" runat="server" enctype="multipart/form-data">
    <div>
        You must select the picture: &nbsp; &nbsp;&nbsp;
        <asp:FileUpload ID="fileuploadPic" runat="server" />
        <br /><br />
        <asp:Button ID="btnOk" runat="server" Text="Click here to upload the picture" OnClick="btnOk_Click" />
        <br />
        <br />
        <br />
        <asp:Label ID="lblInfor" runat="server" Text="Label"></asp:Label>
</div>
</form>

2:创建数据库test。

在数据库test中,我们创建了一个imgtest数据表,其属性字段如下所示:
       id,主键、自动编号;info,varchar(50),用来存储上传图片的格式;img,Image类型,用来存储图片的二进制格式数据。

3:编写btnOk_Click事件,完成图片的上传工作。
      其具体编码如下所示:
using System.Data;
using System.Data.SqlClient;
using System.IO;
protected void btnOk_Click(object sender, EventArgs e)
{
        //判断上传格式是否符合
        bool flag = false;
        if (fileuploadPic.HasFile)
        {
            string fileExtension = Path.GetExtension(fileuploadPic.FileName).ToUpper();
            //只允许上传格式
            string[] allowExtension = { ".JPG",".GIF",".PNG" };
            for (int i = 0; i < allowExtension.Length; i++)
            {
                if (fileExtension == allowExtension[i])
                    flag = true;
            }
        }
        //上传
        if (flag)
        {
            int imgSize;
            string imgType;
            Stream imgStream;
            imgSize = fileuploadPic.PostedFile.ContentLength;
            imgType = fileuploadPic.PostedFile.ContentType;
            imgStream = fileuploadPic.PostedFile.InputStream;
            byte[] imgContent = new byte[imgSize];
            imgStream.Read(imgContent, 0, imgSize);
            imgStream.Close();
            //connection
            string strConn = "server=localhost\\sqlexpress;database=test;user id=sa;password=sa123";
            SqlConnection conn = new SqlConnection(strConn);
            SqlCommand comm = conn.CreateCommand();
            string sql = "insert into imgtest(info,img) values(@info,@img)";
            comm.CommandText = sql;
            comm.Parameters.Add("@info", SqlDbType.VarChar, 50);
            comm.Parameters.Add("@img", SqlDbType.Image);
            comm.Parameters["@info"].Value = imgType;
            comm.Parameters["@img"].Value = imgContent;
            try
            {
                conn.Open();
                comm.ExecuteNonQuery();
                conn.Close();
                lblInfor.Text = "图片上传成功!";
            }
            catch (Exception ex)
            {
                lblInfor.Text = "Error:" + ex.ToString();
            }
        }
        else
        {
            lblInfor.Text = "文件格式不正确,请检查...";
        }
}

4:在上述代码中,我们限定只允许上传三种格式的图片:jpg、gif及png,这样将最大限度地减少错误的发生。
      说明:
      首先使用fileuploadPic.PostedFile.ContentLength获取图片的大小。
      使用fileuploadPic.PostedFile.ContentType获取图片的格式。
      使用fileuploadPic.PostedFile.InputStream获取了一个InputStream流。
      最后使用imgStream.Read(imgContent, 0, imgSize)方法将图片读入到字节数组中,之后的工作就是一件普通的写入数据库的操作。该方法原型为Read(byte[] buffer,int offset,int count),读入buffer,从offset开始读取count个字节数。

注意在comm.Parameters.Add("@img", SqlDbType.Image)一步,需要将img的参数类型设置为SqlDbType.Image。

如果对以上方法有疑虑可以参考MSDN:http://msdn2.microsoft.com/zh-cn/library/system.io.aspx。
对于如何将图片从数据库中读取并显示于页面中,将在下一篇文章中讲解。

在ASP.NET中将图片存储到Sql Server数据库中相关推荐

  1. ASP.NET备份与还原SQL Server数据库

    ASP.NET备份与还原SQL Server数据库 1.备份 SqlConnection connection = new SqlConnection(ConfigurationManager.App ...

  2. 【ASP.NET】VS2015连接SQL Server数据库,实现登录、注册

    文章目录 1. 实验目标 2. 难点 3. 问题 3.1 SQL Server 3.2 Demo练习 3.3 编写页面时的错误 4. 总结 5. 页面 6. 主要代码 [ASP.NET]VS2015连 ...

  3. ASP.NET将EXCEL导入SQL SERVER数据库的代码

    ASP.NET将EXCEL导入SQL SERVER数据库的代码 2007-11-13 10:36 在网上找到一个Asp.Net将Excel数据导入Sql Server数据库的的例子,是调用存储过程的, ...

  4. 如何在SQL Server数据库中加密数据

    如何在SQL Server数据库中加密数据 为了防止某些别有用心的人从外部访问数据库,盗取数据库中的用户姓名.密码.信用卡号等其他重要信息,在我们创建数据库驱动的解决方案时,我们首先需要考虑的的第一条 ...

  5. SQL SERVER数据库中GUEST用户

    SQL SERVER数据库中GUEST用户 问题 谁邀请这些客人(guest)到我的数据库中?你可知道在你的SQL SERVER数据库中还存在guest用户?你可知道SQL SERVER 需要gues ...

  6. 清空SQL Server数据库中所有表数据的方法(转)

    清空SQL Server数据库中所有表数据的方法 其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可能陷入 ...

  7. mysql raiserror_RAISERROR在SQL Server数据库中的用法

    raiserror  是由单词 raise error 组成 raise  增加; 提高; 提升 raiserror 的作用: raiserror 是用于抛出一个错误.[ 以下资料来源于sql ser ...

  8. SQL Server数据库中、获得刚插入新记录的自动ID号

    以下的文章主要是介绍在SQL Server数据库中正确获得刚插入一条新记录的自动ID号的实际操作过程,下面就是文章对其的主要内容的具体描述,望大家在浏览之后会对其有更深的了解. 使用[IDENT_CU ...

  9. 从sqlserver中数据写入mysql_[SQL Server]SQL Server数据库中如何返回INSERT INTO语句插入/写入数据后的记录值(比如ID等)?...

    问题描述 SQL Server数据库中,有时候当我们使用INSERT INTO语句写入数据后,需要返回写入数据对应的自增ID或者GUID,以便根据此记录进行后续的操作.那么SQL语句如何实现返回记录值 ...

最新文章

  1. 3种时间序列混合建模方法的效果对比和代码实现
  2. Linux系统详解 系统的启动、登录、注销与开关机
  3. DevOps:软件架构师行动指南1.7 障碍
  4. PyQt5初级——2
  5. IT架构的本质:工作12年,我的五点感悟
  6. ElasticSearch API文档查看
  7. 好玩有趣,Google 首款小程序来啦!
  8. linux python开发identifier,python程序设计 浙大版
  9. Java基础 - 集合
  10. RocketMQ延迟消息的底层实现源码解析
  11. 编程猫海龟编辑器 附使用教程
  12. 直流电机驱动模块介绍
  13. Mac idea 替换快捷键
  14. 『解疑』script标签 中 deffer和async属性的区别?
  15. 17-内部类的基本概念
  16. 1+x云计算练习题(220)
  17. Weakly-supervised Online Hashing
  18. c语言 谭浩强第五版第五章习题第17题 乒乓球比赛
  19. 网络硬件三剑客 - 集线器、交换机与路由器
  20. [转载]丢掉鼠标-Mac神软Alfred使用手册1_我是亲民_新浪博客

热门文章

  1. 数学建模入门例题python_[Python与数学建模-入门使用]-2Python基础知识
  2. 域名判断真实ip地址
  3. html figure标签并排显示,html figure标签怎么用
  4. ARP探测目标工具arping常用命令集合大学霸IT达人
  5. Xamarin.FormsShell基础教程(8)Shell的模版构成
  6. XamarinSQLite教程在Xamarin.Android项目中提取数据库文件
  7. 分享Kali Linux 2016.2第43周镜像
  8. MAC OS 10.10.5虚拟机免费下载(可安装Xcode7)
  9. Win11让AMD很受伤:CPU游戏性能下降15%,官方建议暂时别升级
  10. 董小姐的空调不一定能当发电站,但牛放屁确实可以发电