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 

 

目录
相关文章
|
26天前
|
SQL 关系型数据库 MySQL
MySQL数据库,可以使用二进制日志(binary log)进行时间点恢复
对于MySQL数据库,可以使用二进制日志(binary log)进行时间点恢复。二进制日志是MySQL中记录所有数据库更改操作的日志文件。要进行时间点恢复,您需要执行以下步骤: 1. 确保MySQL配置文件中启用了二进制日志功能。在配置文件(通常是my.cnf或my.ini)中找到以下行,并确保没有被注释掉: Copy code log_bin = /path/to/binary/log/file 2. 在需要进行恢复的时间点之前创建一个数据库备份。这将作为恢复的基准。 3. 找到您要恢复到的时间点的二进制日志文件和位置。可以通过执行以下命令来查看当前的二进制日志文件和位
|
1月前
|
SQL 数据库连接 数据库
你不知道ADo.Net中操作数据库的步骤【超详细整理】
你不知道ADo.Net中操作数据库的步骤【超详细整理】
16 0
|
1月前
|
SQL 数据库 C#
C# .NET面试系列十一:数据库SQL查询(附建表语句)
#### 第1题 用一条 SQL 语句 查询出每门课都大于80 分的学生姓名 建表语句: ```sql create table tableA ( name varchar(10), kecheng varchar(10), fenshu int(11) ) DEFAULT CHARSET = 'utf8'; ``` 插入数据 ```sql insert into tableA values ('张三', '语文', 81); insert into tableA values ('张三', '数学', 75); insert into tableA values ('李四',
65 2
C# .NET面试系列十一:数据库SQL查询(附建表语句)
|
2月前
|
开发框架 Oracle 关系型数据库
ASP.NET实验室LIS系统源码 Oracle数据库
LIS是HIS的一个组成部分,通过与HIS的无缝连接可以共享HIS中的信息资源,使检验科能与门诊部、住院部、财务科和临床科室等全院各部门之间协同工作。 
37 4
|
3月前
|
存储 NoSQL API
一个小巧、快速、轻量级的 .NET NoSQL 嵌入式数据库
一个小巧、快速、轻量级的 .NET NoSQL 嵌入式数据库
137 0
|
3月前
|
开发框架 前端开发 JavaScript
盘点72个ASP.NET Core源码Net爱好者不容错过
盘点72个ASP.NET Core源码Net爱好者不容错过
71 0
|
3月前
|
开发框架 .NET
ASP.NET Core NET7 增加session的方法
ASP.NET Core NET7 增加session的方法
37 0
|
1月前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
29 0
|
1月前
|
SQL 存储 关系型数据库
C# .NET面试系列十:数据库概念知识
#### 1. 为什么要一定要设置主键? 设置主键是数据库设计中的一个重要概念,有几个主要原因: 1、唯一性 ```c# 主键必须保证表中的每一行都有唯一的标识。这样可以避免数据冗余和不一致性。如果没有主键或者主键不唯一,就可能出现数据混乱或错误。 ``` 2、查询性能 ```c# 数据库系统通常会使用主键来加速数据检索。主键通常会被索引,这样可以更快速地找到特定行的数据,提高查询效率。 ``` 3、关联性 ```c# 主键常常用于建立表与表之间的关系。在关系数据库中,一个表的主键通常与其他表中的外键建立关联,这种关系对于数据的一致性和完整性非常重要。 ``` 4、数据完
131 1
C# .NET面试系列十:数据库概念知识
|
1月前
|
存储 PHP Apache
使用CFimagehost源码搭建无需数据库支持的PHP免费图片托管私人图床
使用CFimagehost源码搭建无需数据库支持的PHP免费图片托管私人图床