存储图片到SQL SERVER数据库中
- 格式:doc
- 大小:48.50 KB
- 文档页数:8
sqlserver image字段SQL Server是一种关系型数据库管理系统,它支持存储和管理各种类型的数据。
其中,image字段是一种用于存储二进制数据的字段类型。
在本文中,我们将探讨如何使用SQL Server的image字段来实现一些常见的功能和应用。
让我们了解一下image字段的基本特性。
image字段可以用来存储任意类型的二进制数据,例如图片、音频、视频等。
它的最大长度为2^31-1字节,可以存储非常大的数据。
在使用image字段之前,我们需要在数据库中创建相应的表,并为该字段指定合适的数据类型。
一种常见的应用是在数据库中存储图片。
通过将图片转换为二进制数据,并将其存储在image字段中,我们可以方便地在数据库中管理和检索图片。
例如,我们可以创建一个包含image字段的表来存储用户头像。
当用户上传头像时,我们将其转换为二进制数据,并将其存储在image字段中。
当用户需要查看头像时,我们可以从数据库中检索该二进制数据,并将其转换为图片格式进行展示。
除了存储图片,image字段还可以用于存储其他类型的二进制数据。
例如,我们可以使用image字段来存储音频文件。
当用户上传音频文件时,我们将其转换为二进制数据,并将其存储在image字段中。
当用户需要播放音频文件时,我们可以从数据库中检索该二进制数据,并将其转换为音频格式进行播放。
另一个常见的应用是在数据库中存储视频文件。
通过将视频文件转换为二进制数据,并将其存储在image字段中,我们可以方便地在数据库中管理和检索视频文件。
例如,我们可以创建一个包含image字段的表来存储用户上传的视频。
当用户上传视频时,我们将其转换为二进制数据,并将其存储在image字段中。
当用户需要播放视频时,我们可以从数据库中检索该二进制数据,并将其转换为视频格式进行播放。
除了存储媒体文件,image字段还可以用于其他一些功能。
例如,我们可以使用image字段来存储电子签名。
基于SQLServer的Asp.net图片存储技术引言互联网时代的到来使得各种各样的基于互联网的应用系统层出不穷其中绝大部分应用系统都会用到图片数据需要将图片在用户界面显示出来这里介绍一种实现 ... 把图片存储到某个文件夹内然后按要求显示具体实现步骤是把图片路径等记录的附加信息存储到数据库中而真正的图片文件存储到某个文件夹该 ... 是一种很好的解决方案图片的处理方式对于图片的处理有两种方式①图片数据以文件形式直接存储在硬盘在数据库中保存该图片的记录附加信息(路径文件名注释…)②图片直接存储在数据库中这两种方式各有利弊图片文件存入数据库中便于管理与维护而存入硬盘可能会因为不小心删除图片文件而使得数据不一致但图片放在数据库中不便于修改编辑同时会引起数据库读取数据时的I/O消耗而放在硬盘上则不会引起这个问题所以对于小文件建议放在数据库中便于管理而对于大文件且不可放在数据库中否则数据库表会大量产生数据文件的碎片图片存储 ...该系统使用ASP NET和SQL Server数据库实现图片的存储将图片存放到硬盘指定的目录下将图片的相对存储路径和其他附属信息存储到数据库中开发平台使用的语言为VB 数据库访问技术为AD NET 擞据访问机制采用的是AD NET里的OleDb机制数据库表的建立对于整个图片管理系统中的图片存储需建立图片内容表(myimg)其结构如表所示后台数据库的配置图片管理系统使用SQL Server 数据库代码如下添加图片页面进入页面即可添加图片存储图片路径到数据库页面示例添加图片页面如图所示图片的上传 ...单击如图所示的浏览按钮就会弹出windows操作系统的选择文件对话框选择好合适的图片以后单击打开即可如图所示然后单击上传文件按钮如果上传成功就会给出如图所示的提示信息以及该图片的相对路径将上传图片的相对路径复制到图片路径文本框中并且输入图片标题图片说明选择图片所属的栏目最后单击提交按钮如图所示如果信息成功写入数据库就会给出添加图片成功提示信息页面用到的数据库信息添加新图片页面使用了数据库中的myimg表将用户输入图片的合法信息写到表中包含myimg表的所有字段结语lishixinzhi/Article/program/net/201311/13730。
收稿日期 :2005-03-16作者简介 :刘晓瑞 (1980- , 女 , 河南开封人 , 广州城市职业学院教师。
SQL Server 存储图像数据的策略与方法刘晓瑞 1, 王鸿飞 2(11广州城市职业学院 , 广东广州 510000;21漯河职业技术学院 , 河南漯河462000摘要 :SQ L Server 是当前最为常用的数据库管理系统 , , 直是数据库管理软件的难点 , 本文就这个问题来进行讨论 , 在 S Q L , 据的策略和方法。
关键词 :图像数据 ; 客户机 /服务器 ; BLOB 数据 ; 中图分类号 :TP392-7864(2006 01-0008-02目前, “表 +实体” 的方法 , , 在数据库表中只反映图像数据文件的存储路径。
这种管理模式给数据的维护增加了难度 , 同时也给数据的安全带来一定的隐患。
因此 , 要真正做到各类数据在数据库中的安全管理 , 研究和探索直接将图像数据存储在数据库关系表中的方法是非常必要的。
笔者在 Visual Basic 6. 0开发环境中 , 采用客户机 /服务器的工作方式 , 针对 S Q L Server 数据库关系表中存储图像数据的问题进行了初步探讨 , 提出了一套基本解决方案。
1存储图像数据的策略图像数据库技术解决海量数字图像的有效存储和管理问题。
图像数据和文本数据存在着本质的区别 , 在文本数据领域得以成功应用的传统数据库技术 , 如果一成不变地照搬到图像数据库领域 , 结果往往是低效 , 甚至无效 ; 传统数据库的许多成果 , 如 S Q L 语言、索引技术等 , 都值得图像数据库借鉴。
1. 1 BLOB 数据类型BLOB 是二进制或者字符型数据 , 通常是文档 (. txt 、 . doc 和图片 (. jpeg 、 . gif 、 . bm p , 它可以存储在数据库中。
在 S Q L Server 中 ,BLOB 可以是 text 、ntext 或者 image 数据类型。
把图片存到数据库中,自己用VS2005+SQLServer2005实现了这个功能.上面是主界面上面是显示界面数据库为Picture,数据表为Picture,表结构设计如下所示:PictureID int 4, PictureContentImage, PictureText nvarchar(50)下面是主界面的代码namespace PictureToDataBase{public partial class Main : Form{string fileSaveURL;public Main(){InitializeComponent();}private void cmdOpen_Click(object sender, EventArgs e){this.openFileDialog.ShowDialog();string fileURL = this.openFileDialog.FileName;this.picView.ImageLocation = fileURL;this.fileSaveURL = fileURL;}private void cmdSave_Click(object sender, EventArgs e){ //获取图片的二进制流FileStream fs = new FileStream(fileSaveURL, FileMode.Open);BinaryReader br = new BinaryReader(fs);byte[] photo = br.ReadBytes((int)fs.Length);br.Close();fs.Close();//把图片写到数据库中string conn = @"DataSource=JNITDEV\SQLEXPRESS;Initial Catalog=Picture;IntegratedSecurity=True";using (SqlConnection sqlConn = new SqlConnection(conn)){SqlCommand sqlComm = new SqlCommand();sqlConn.Open();sqlComm.Connection = sqlConn;mandText = "INSERT INTOPicture (PictureContent, PictureText) VALUES (@Picture,'Test')";mandType = CommandType.Text;sqlComm.Parameters.Add("@Picture", SqlDbType.Image, photo.Length).Value = photo;sqlComm.ExecuteNonQuery();}}private void cmdShow_Click(object sender, EventArgs e){PicShow picShow = new PicShow();picShow.Show();}}}下面是显示界面代码using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.IO;using System.Data.SqlClient;namespace PictureToDataBase{public partial class PicShow : Form{int picID;int maxID;int minID;string conn = @"Data Source=JNITDEV\SQLEXPRESS;Initial Catalog=Picture;Integrated Security=True";public PicShow(){InitializeComponent();}private void PicShow_Load(object sender, EventArgs e){using (SqlConnection sqlConn = new SqlConnection(conn)){SqlCommand sqlComm = new SqlCommand();sqlConn.Open();sqlComm.Connection = sqlConn;mandText = "SELECT TOP 1 PictureContent,PictureID FROM Picture ORDER BY PictureID DESC";mandType = CommandType.Text;using (SqlDataReader dr =sqlComm.ExecuteReader()){dr.Read();MemoryStream ms = new MemoryStream((byte[])dr[0]);Image img =Image.FromStream(ms);this.picShowPic.Image = img;this.picID = (int)dr[1];}SetButton();}}private void SetButton(){using (SqlConnection sqlConn = new SqlConnection(conn)){SqlCommand sqlComm = new SqlCommand();sqlConn.Open();sqlComm.Connection = sqlConn;mandText = "SELECTMAX(PictureID) AS maxID,MIN(PictureID) AS minID FROM Picture";mandType = CommandType.Text;using (SqlDataReader dr =sqlComm.ExecuteReader()){dr.Read();maxID = (int)dr[0];minID = (int)dr[1];}}this.cmdPreview.Enabled = picID > minID;this.cmdNext.Enabled = picID < maxID;}private void cmdNext_Click(object sender, EventArgs e){this.picID++;LoadPicture();SetButton();}private void LoadPicture(){using (SqlConnection sqlConn = new SqlConnection(conn)){SqlCommand sqlComm = new SqlCommand();sqlConn.Open();sqlComm.Connection = sqlConn;mandText = "SELECT PictureContent,PictureID FROM Picture WHERE PictureID = @picID";mandType = CommandType.Text;sqlComm.Parameters.Add("@picID", SqlDbType.Int).Value = picID;using (SqlDataReader dr =sqlComm.ExecuteReader()){dr.Read();//以下把数据库中读出的Image流在图片框中显示出来.MemoryStream ms = new MemoryStream((byte[])dr[0]);Image img =Image.FromStream(ms);this.picShowPic.Image = img;this.picID = (int)dr[1];}}}private void cmdPreview_Click(object sender, EventArgs e){this.picID--;LoadPicture();SetButton();}}}。
如何存储图片到SQL SERVER数据库中SQL Server提供了一个特别的数据类型:image,它是一个包含binary数据的类型。
下边这个例子就向你展示了如何将文本或照片放入到数据库中的办法。
在这篇文章中我们要看到如何在SQL Server中存储和读取图片。
1、建立一个表:在SQL SERVER中建立这样结构的一个表:列名类型目的ID Integer 主键IDIMGTITLE Varchar(50) 图片的标题IMGTYPE Varchar(50) 图片类型. 要以辨认的类型IMGDATA Image 用于存储二进制数据2、存储图片到SQL SERVER数据库中为了能存储到表中,你首先要上传它们到你的WEB 服务器上,你可以开发一个web form,它用来将客户端中TextBox web control中的图片入到你的WEB服务器上来。
将你的encType 属性设置为:myltipart/formdata.Stream imgdatastream = File1.PostedFile.InputStream;int imgdatalen = File1.PostedFile.ContentLength;string imgtype = File1.PostedFile.ContentType;string imgtitle = TextBox1.Text;byte[] imgdata = new byte[imgdatalen];int n = imgdatastream.Read(imgdata,0,imgdatalen);string connstr=((NameValueCollection)Context.GetConfig("appSettings"))["connstr"]; SqlConnection connection = new SqlConnection(connstr);SqlCommand command = new SqlCommand("INSERT INTO ImageStore(imgtitle,imgtype,imgdata)V ALUES ( @imgtitle, @imgtype,@imgdata )", connection ); SqlParameter paramTitle = new SqlParameter("@imgtitle", SqlDbType.VarChar,50 );paramTitle.Value = imgtitle;command.Parameters.Add( paramTitle);SqlParameter paramData = new SqlParameter( "@imgdata", SqlDbType.Image ); paramData.Value = imgdata;command.Parameters.Add( paramData );SqlParameter paramType = new SqlParameter( "@imgtype", SqlDbType.VarChar,50 ); paramType.Value = imgtype;command.Parameters.Add( paramType );connection.Open();int numRowsAffected = command.ExecuteNonQuery();connection.Close();3、从数据库中恢复读取现在让我们来从SQL Server中读取我们放入的数据吧!我们将要输出图片到你的浏览器上,你也可以将它存放到你要的位置。
C#基础——winform应⽤上传图⽚到SQLServer数据库前⾔之前通过winform与SQL Server的交互⼀直局限于⽂本、数字等信息,都可以通过string的⽅式来传输,但是⽐如⾳乐、图⽚等特殊格式的⽂件要如何与SQL Server数据库进⾏交互呢?今天主要讲通过⽂件流的⽅式,将特殊⽂件转换成⼆进制,然后存储到数据库中。
在实际的应⽤中,如果⽂件较⼤或者较多,直接存储在数据中会造成⼀定的压⼒,可以转为保存⽂件名,然后在实际使⽤的地⽅调⽤改⽂件名对应的⽂件。
主要内容上图为图⽚上传winform的内容。
1、选择图⽚按钮,功能为通过对话框选择要上传的⽂件,并将该⽂件在下⾯的pictureBox中显⽰出来。
具体代码如下:private void btn_Choose_Click(object sender, EventArgs e){UserMethod.ShowPic(this.pictureBox1);}1public static void ShowPic(PictureBox picBox)2 {3 OpenFileDialog ofd = new OpenFileDialog();4 ofd.InitialDirectory = @"E:\";5 ofd.Filter = "Image Files(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|All files(*.*)|*.*";6 ofd.RestoreDirectory = true;78if (ofd.ShowDialog() == DialogResult.OK)9 {10 picAddress = ofd.FileName;11 Image imge = Image.FromFile(picAddress);12 Bitmap bm = new Bitmap(imge, picBox.Width, picBox.Height);13 picBox.Image = bm;14 }15 }ShowPic()⽅法为静态⽅法,可以直接调⽤,其中的picAddress变量为静态全局变量,⽤于记录要上传⽂件的⽂件地址。
如何将图片保存到sql数据库中并且读取出来直接上代码,项目见图片using System.Collections;using System.Collections.Generic;using UnityEngine;using System.Data;using System.Data.SqlClient;using System.IO;using UnityEngine.UI;public class SavePicToSql_Test : MonoBehaviour {SqlConnection conn;// Use this for initializationvoid Start () {string sqlstring = "server=127.0.0.1;database=PICTest;uid=sa;pwd=sa";conn = new SqlConnection(sqlstring);SavePic();}// Update is called once per framevoid Update () {}void SavePic() {string fullpath =@"D:\PIC\1.jpg";FileStream fs = new FileStream(fullpath, FileMode.Open);byte[] imagebytes = new byte[fs.Length];BinaryReader br = new BinaryReader(fs);imagebytes = br.ReadBytes((int)fs.Length);conn.Open();SqlCommand com = new SqlCommand("insert into Table_pic values (@Pic)", conn);com.Parameters.Add("Pic", SqlDbType.Image);com.Parameters["Pic"].Value = imagebytes;com.ExecuteNonQuery();conn.Close();}public Image image;public void ReadPic() {byte[] imagebytes = null;conn.Open();SqlCommand com=new SqlCommand("select top 1*from Table_pic", conn);SqlDataReader dr = com.ExecuteReader();while (dr.Read()){imagebytes = (byte[])dr.GetValue(1);}dr.Close();com.Clone();conn.Close();Texture2D texture = new Texture2D(372, 372);texture.LoadImage(imagebytes);image.sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f));}}数据库结构:unity结构:。
图片文件在SQL Server数据库的存取在很多时候,我们需要将图片文件存入到SQL Server数据库中,并且在使用的时候将数据库中的图片取出。
本文将描述用C#语言来实现这一过程。
数据库表结构如果要将图片数据存入SQL Server数据库的表中,我们必须使用SQL Server的image 数据类型,在被试验中,我们将使用如下的语句创建数据库表StudentInfo:CREATE TABLE [dbo].[StudentInfo]([ID] [int] IDENTITY(1,1)NOT NULL,[Name] [varchar](50)COLLATE Chinese_PRC_CI_AS NULL,[Age] [int] NULL,[Sex] [nchar](10)COLLATE Chinese_PRC_CI_AS NULL,[Class] [varchar](15)COLLATE Chinese_PRC_CI_AS NULL,[Hobby] [varchar](50)COLLATE Chinese_PRC_CI_AS NULL,[Picture] [image] NULL)其中字段Picture字段为image数据类型,用来保存学生的照片。
图片存入数据库要将图片数据存入到数据库表的image数据类型的字段中,首先需要将图片文件中的数据读入到内存字节中,在将内存字节存入数据库中,具体示例代码如下:private void btnUpload_Click(object sender, EventArgs e){//上传图片到数据库OpenFileDialog openDlg = new OpenFileDialog();openDlg.Filter = "图片文件(*.jpg)|*.jpg";string filePath = "";if (openDlg.ShowDialog() == DialogResult.OK){filePath = openDlg.FileName;this.txtFilePath.Text = filePath;this.picShow.ImageLocation = filePath;//打开文件流,用来读取图片文件中的数据FileStream stream = new FileStream(filePath,FileMode.Open,FileAccess.Read);//将文件流中的数据存入内存字节组中byte[] buffer = new byte[stream.Length];stream.Read(buffer,0,(int)stream.Length);stream.Close();try{//调用存储图片数据的存取过程string strName = Path.GetFileName(filePath);string connString = "Data Source=.;Initial Catalog=StuDB;Persist SecurityInfo=True";SqlConnection conn = new SqlConnection(connString);conn.Open();SqlCommand cmd = new SqlCommand("proc_UploadPicture", conn);mandType = CommandType.StoredProcedure;cmd.Parameters.Add("@ID", SqlDbType.Int).Value = 1;cmd.Parameters.Add("@Picture", SqlDbType.Image).Value = buffer;cmd.Parameters.Add("@Ext", SqlDbType.VarChar).Value = strName;cmd.ExecuteNonQuery();conn.Close();}catch (Exception ex){MessageBox.Show(ex.Message);}}}存储过程proc_UploadPicture代码如下:Create procedure [dbo].[proc_UploadPicture]@ID int,@Picture imageASupdate StudentInfo set Picture = @Picturewhere ID = @ID从数据库读取图片要从数据库中获取图片数据,并将图片显示在界面上,需要将数据库中的图片数据读入到内存中,在将内存的数据用位图来格式化,并将位图显示在界面的PictureBox控件中。
如何将图片保存到SqlServer、Oracle、Access数据库中。
-懒猫星空--...如何将图片保存到SqlServer、Oracle、Access数据库中。
首先,我们要明白图片是以二进制的形式保存在数据库中的,那么把图片保存到数据库中的步骤大体上有这几步1.将图片转换为二进制数组(byte[]);2.把转换后的二进制数组(byte[])作为参数传递给要执行的Command;3.执行Command;首先,如何把图片转换成byte[],如果你使用的是2.0,那么你可以使用FileUpLoad控件来实现byte[] fileData = this.FileUpload1.FileBytes;如果你用的是1.1或者你在创建WinForm那么你可以使用下面的方法来把图片转换为byte[] public byte[] getBytes(string filePath){System.IO.FileStream fs = new System.IO.FileStream(filePath, System.IO.FileMode.Open);byte[] imgData = new byte[fs.Length];fs.Read(imgData, 0, (int)fs.Length);return imgData;}1.SqlServer数据库。
SqlServer有Image字段类型,最大可以存储2G的数据。
byte[] fileData = this.FileUpload1.FileBytes;string sql = "insert into t_img(img) values (@img)";string strconn = System.Configuration.ConfigurationManager.ConnectionStrings[ "fengdongDB"].T oString();SqlConnection sqlConn = new SqlConnection(strconn);SqlCommand sqlComm = new SqlCommand(sql, sqlConn);sqlComm.Parameters.Add("@img", SqlDbType.Image);//添加参数sqlComm.Parameters["@img"].Value = fileData;//为参数赋值sqlConn.Open();sqlComm.ExecuteNonQuery();sqlConn.Close();2.Oracle数据库。
1、建所需数据库和表,语句如下:--建立数据库create database test--使用该数据库use test--建立存放图片的表create table piclist(id int Identity primary key,pic Image not null)2、制作上传图片的模块,代码如下:前台html代码:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="UpPhoto.aspx.cs" Inherits="Test_UpPhoto" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml" ><head runat="server"><title>无标题页</title></head><body><form id="form1" runat="server"><div><input id="UpPhoto" name="UpPhoto" runat="server" type="file" /><asp:Button id="btnAdd" runat="server" Text="上传"OnClick="btnAdd_Click"></asp:Button></div></form></body></html>后台代码:using System;using System.Data;using System.Configuration;using System.Collections;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.IO;using System.Data.SqlClient;public partial class Test_UpPhoto : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){}protected void btnAdd_Click(object sender, EventArgs e){//获得图象并把图象转换为byte[]HttpPostedFile upPhoto = UpPhoto.PostedFile;int upPhotoLength = upPhoto.ContentLength;byte[] PhotoArray = new Byte[upPhotoLength];Stream PhotoStream = upPhoto.InputStream;PhotoStream.Read(PhotoArray, 0, upPhotoLength);//连接数据库string ConStr = "server=(local);user id=sa;pwd=sa;database=test";SqlConnection conn = new SqlConnection(ConStr);string strSql = "Insert into piclist(pic) values(@pic)";SqlCommand cmd = new SqlCommand(strSql, conn);cmd.Parameters.Add("@pic", SqlDbType.Image);cmd.Parameters["@pic"].Value = PhotoArray;conn.Open();cmd.ExecuteNonQuery();conn.Close();Response.Write("图片上传成功");}}3、制作显示图片的模块(单独显示图片,即没用到datalist):后台代码:using System;using System.Data;using System.Configuration;using System.Collections;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.Data.SqlClient;using System.IO;public partial class Test_ShowPhoto : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){if(!Page.IsPostBack){//连接数据库string ConnStr = "server=(local);user id=sa;pwd=sa;database=test";string strSql = "select * from piclist";SqlConnection conn = new SqlConnection(ConnStr);conn.Open();SqlCommand cmd=new SqlCommand(strSql,conn);SqlDataReader reader = cmd.ExecuteReader();while (reader.Read()){Response.ContentType = "application/octet-stream";Response.BinaryWrite((Byte[])reader["pic"]);Response.Write("successful");}reader.Close();conn.Close();Response.End();}}}补充步骤3,用datalist显示图片方法:建立两个 页面,名称为piclist.aspx和StreamImg.aspx。