ASP.NET中让图片以二进制的形式存储在数据库中

简介: 今早有个网友问到我这问题,以前我都是直接在数据库中存文件名的,还没有试过存储整张图片到数据库中,上网搜索了一下,自己又测试了一番,代码如下:建立保存图片的表的SQL语句:代码USE [niunantest]GO/****** 对象:  Table [dbo].
     今早有个网友问到我这问题,以前我都是直接在数据库中存文件名的,还没有试过存储整张图片到数据库中,上网搜索了一下,自己又测试了一番,代码如下:

建立保存图片的表的SQL语句:

img_405b18b4b6584ae338e0f6ecaf736533.gif 代码
USE   [ niunantest ]
GO
/* ***** 对象:  Table [dbo].[picdata]    脚本日期: 03/30/2010 14:51:58 ***** */
SET  ANSI_NULLS  ON
GO
SET  QUOTED_IDENTIFIER  ON
GO
CREATE   TABLE   [ dbo ] . [ picdata ] (
    
[ id ]   [ int ]   IDENTITY ( 1 , 1 NOT   NULL ,
    
[ content ]   [ image ]   NULL ,
    
[ createdate ]   [ datetime ]   NOT   NULL   CONSTRAINT   [ DF_picdata_createdate ]    DEFAULT  ( getdate ()),
 
CONSTRAINT   [ PK_picdata ]   PRIMARY   KEY   CLUSTERED  
(
    
[ id ]   ASC
)
WITH  (PAD_INDEX   =   OFF , STATISTICS_NORECOMPUTE   =   OFF , IGNORE_DUP_KEY  =   OFF , ALLOW_ROW_LOCKS   =   ON , ALLOW_PAGE_LOCKS   =   ON ON   [ PRIMARY ]
ON   [ PRIMARY ]  TEXTIMAGE_ON  [ PRIMARY ]

 

 

下面是保存图片到数据库中的代码片段:

         int  len  =  fu.PostedFile.ContentLength;   //  图片大小
         byte [] pic  =   new   byte [len];   //  创建一个字节数组,大小为图片的大小,数据库中就存储这个东西
        fu.PostedFile.InputStream.Read(pic,  0 , len);  //  把上传控件中的文件用二进制读取存到pic字节数组中
        
//    插入图片到数据库中     
        SqlConnection connection  =   new
        SqlConnection(
@" server=.\sqlexpress;database=niunantest;uid=sa;pwd=123456 " );
        
try
        {
            connection.Open();
            SqlCommand cmd 
=   new  SqlCommand( " insert   into   picdata    "
            
+   " ([content])   values   (@pic) " , connection);
            cmd.Parameters.Add(
" @pic " , pic);
            cmd.ExecuteNonQuery();
            Label1.Text 
=   " 图片插入数据库成功! " ;

            Image1.ImageUrl 
=   " getpic.ashx?t= "   +  DateTime.Now.Ticks;   //  显示刚刚插入数据库的图片
        }
        
finally
        {
            connection.Close();
        } 

 

 

 

下面是从数据库中取出图片的代码片段:

img_405b18b4b6584ae338e0f6ecaf736533.gif 代码
        MemoryStream stream  =   new  MemoryStream();
        SqlConnection connection 
=   new
        SqlConnection(
@" server=.\sqlexpress;database=niunantest;uid=sa;pwd=123456 " );
        
try
        {
            connection.Open();
            SqlCommand command 
=   new
            SqlCommand(
" select top 1  [content]   from   picdata order by id desc " , connection);
            
byte [] image  =  ( byte [])command.ExecuteScalar();
            stream.Write(image, 
0 , image.Length);
            Bitmap bitmap 
=   new  Bitmap(stream);
            context.Response.ContentType 
=   " image/jpeg " ;
            bitmap.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
        }
        
finally
        {
            connection.Close();
            stream.Close();
        } 

 

 

    其实也就是通过流把图片搞成字节数组再存到数据库中,然后再从数据库中读取字节数组出来,再通过字节数组创建流,再通过流把图像输出出来,发现你存到数据库中的是gif图像的话再取出来是可以把他转为jpg的图像的,因为在取出图像的时候我们设置他的ContentType是image/jpeg了。

源码下载:http://niunan.net/download/picsave2db.7z 

 

目录
相关文章
|
SQL 开发框架 .NET
ASP.NET连接SQL数据库:详细步骤与最佳实践指南ali01n.xinmi1009fan.com
随着Web开发技术的不断进步,ASP.NET已成为一种非常流行的Web应用程序开发框架。在ASP.NET项目中,我们经常需要与数据库进行交互,特别是SQL数据库。本文将详细介绍如何在ASP.NET项目中连接SQL数据库,并提供最佳实践指南以确保开发过程的稳定性和效率。一、准备工作在开始之前,请确保您
925 3
|
SQL 开发框架 数据库
".NET开发者的超能力:AgileEAS.NET ORM带你穿越数据库的迷宫,让数据操作变得轻松又神奇!"
【8月更文挑战第16天】AgileEAS.NET是面向.NET平台的企业应用开发框架,核心功能包括数据关系映射(ORM),允许以面向对象方式操作数据库,无需编写复杂SQL。通过继承`AgileEAS.Data.Entity`创建实体类对应数据库表,利用ORM简化数据访问层编码。支持基本的CRUD操作及复杂查询如条件筛选、排序和分页,并可通过导航属性实现多表关联。此外,提供了事务管理功能确保数据一致性。AgileEAS.NET的ORM简化了数据库操作,提升了开发效率和代码可维护性。
163 5
|
数据库 C# 开发者
ADO.NET连接到南大通用GBase 8s数据库
ADO.NET连接到南大通用GBase 8s数据库
|
存储 缓存 NoSQL
2款使用.NET开发的数据库系统
2款使用.NET开发的数据库系统
188 3
|
SQL 开发框架 .NET
ASP连接SQL数据库:从基础到实践
随着互联网技术的快速发展,数据库与应用程序之间的连接成为了软件开发中的一项关键技术。ASP(ActiveServerPages)是一种在服务器端执行的脚本环境,它能够生成动态的网页内容。而SQL数据库则是一种关系型数据库管理系统,广泛应用于各类网站和应用程序的数据存储和管理。本文将详细介绍如何使用A
542 3
|
数据库连接 数据库 C#
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(上)
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(上)
|
数据库连接 数据库 C#
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(下)
本文接续前文,深入讲解了在Windows环境下使用C#和ADO.NET操作南大通用GBase 8s数据库的方法。通过Visual Studio 2022创建项目,添加GBase 8s的DLL引用,并提供了详细的C#代码示例,涵盖数据库连接、表的创建与修改、数据的增删查改等操作,旨在帮助开发者提高数据库管理效率。
|
SQL 存储 关系型数据库
C#一分钟浅谈:使用 ADO.NET 进行数据库访问
【9月更文挑战第3天】在.NET开发中,与数据库交互至关重要。ADO.NET是Microsoft提供的用于访问关系型数据库的类库,包含连接数据库、执行SQL命令等功能。本文从基础入手,介绍如何使用ADO.NET进行数据库访问,并提供示例代码,同时讨论常见问题及其解决方案,如连接字符串错误、SQL注入风险和资源泄露等,帮助开发者更好地利用ADO.NET提升应用的安全性和稳定性。
868 6
|
存储 NoSQL API
.NET NoSQL 嵌入式数据库 LiteDB 使用教程
.NET NoSQL 嵌入式数据库 LiteDB 使用教程~
760 0