当前位置:文档之家› C#从SQL 数据库中读取和存入图片

C#从SQL 数据库中读取和存入图片

C#从SQL 数据库中读取和存入图片本实例主要介绍如何将图片存入数据库。

将图片存入数据库,首先要在数据库中建立一张表,将存储图片的字段类型设为Image类型,用FileStream类、BinaryReader把图片读成字节的形式,赋给一个字节数组,然后用ADO.SqlCommand对象的ExecuteNonQuery()方法来把数据保存到数据库中。

主要代码如下:private void button1_Click(object sender, EventArgs e){openFileDialog1.Filter ="*jpg|*.JPG|*.GIF|*.GIF|*.BMP|*.BMP";if(openFileDialog1.ShowDialog()==DialogResult. OK){string fullpath=openFileDialog1.FileName;//文件路径FileStream fs = new FileStream(fullpath, FileMode.Open);byte[] imagebytes =new byte[fs.Length];BinaryReader br = new BinaryReader(fs);imagebytes =br.ReadBytes(Convert.ToInt32(fs.Length));//打开数据库SqlConnection con = newSqlConnection("server=(local);uid=sa;pwd=;database=db_05");con.Open();SqlCommand com = new SqlCommand("insert into tb_08 values(@ImageList)",con);com.Parameters.Add("ImageList", SqlDbType.Image);com.Parameters["ImageList"].Value = imagebytes;com.ExecuteNonQuery();con.Close();}}本实例主要介绍如何从数据库中把图片读出来。

实现本实例主要是利用SqlDataReader从数据库中把Image字段值读出来,赋给一个byte[]字节数组,然后使用MemoryStream类与Bitmap把图片读取出来。

主要代码如下:private void button1_Click(object sender, EventArgs e){byte[] imagebytes = null;//打开数据库SqlConnection con = newSqlConnection("server=(local);uid=sa;pwd=;database=db_05");con.Open();SqlCommand com = new SqlCommand("select top 1* from tb_09", con);SqlDataReader dr = com.ExecuteReader();while (dr.Read()){imagebytes =(byte[])dr.GetValue(1);}dr.Close();com.Clone();con.Close();MemoryStream ms = newMemoryStream(imagebytes);Bitmap bmpt = new Bitmap(ms);pictureBox1.Image = bmpt;}本实例主要介绍如何只允许输入指定图片格式。

用OpenFileDialog控件打开图片文件,只要将OpenFileDialog控件的Filter属性指定为特定的图片格式即可。

例如,打开.bmp文件的图片,主要代码如下:this.openFileDialog1.Filter = "bmp文件(*.bmp)|*.bmp";在用pictureBox控件输入图片时,要想统一图片大小,只需把控件的SizeMode 属性值设为StretchImage即可,StretchImage值表示图像的大小将调整为控件的大小。

这样,图片的大小就统一了。

下上传图片到数据库,并且读出图片首先在SQL Server中建立一个图片存储的数库表,ImageData Column为图象二进制数据储存字段,ImageContentType Column为图象文件类型记录字段,ImageDescription Column为储蓄图象文件说明字段,ImageSize Column为储存图象文件长度字段,结构如下:CREATE TABLE [dbo].[ImageStore] ([ImageID] [int] IDENTITY (1, 1) NOT NULL ,[ImageData] [image]NULL ,[ImageContentType] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL , [ImageDescription] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL ,[ImageSize] [int] NULL) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]*///UpLoadImage.aspx程序内容如下:<%@ Page Inherits="UploadImage.UploadImage" SRC="UpLoadImage.cs"Language="C#"%><HTML><title>上传图片</title><BODY bgcolor="#FFFFFF"><FORM ENCTYPE="multipart/form-data" RUNAT="server" ID="Form1"><TABLE RUNAT="server" WIDTH="700" ALIGN="left" ID="Table1" cellpadding="0"cellspacing="0" border="0"><TR><TD>上传图片(选择你要上传的图片)</TD><TD><INPUT TYPE="file" ID="UP_FILE" RUNAT="server" STYLE="Width:320"ACCEPT="text/*" NAME="UP_FILE"></TD></TR><TR><TD>文件说明(添加上传图片说明,如:作者、出处)</TD><TD><asp:TextBox RUNAT="server" WIDTH="239" ID="txtDescription"MAINTAINSTATE="false" /></TD></TR><TR><TD><asp:Label RUNAT="server" ID="txtMessage" FORECOLOR="red"MAINTAINSTATE="false" /></TD><TD><asp:Button RUNAT="server" WIDTH="239" onCLICK="Button_Submit" TEXT="UploadImage" /></TD></TR></TABLE></FORM></BODY></HTML>//------------------------------------------------------------------- //UpLoadImage.cs程序内容如下:using System;using System.Web;using System.IO;using System.Data;using System.Data.SqlClient;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.HtmlControls;namespace UploadImage{public class UploadImage : Page{protected HtmlInputFile UP_FILE; //HtmlControl、WebControls控件对象protected TextBox txtDescription;protected Label txtMessage;protected Int32 FileLength = 0; //记录文件长度变量protected void Button_Submit(System.Object sender, System.EventArgs e) {HttpPostedFile UpFile = UP_FILE.PostedFile; //HttpPostedFile对象,用于读取图象文件属性FileLength = UpFile.ContentLength; //记录文件长度try {if (FileLength == 0){//文件长度为零时txtMessage.Text = "<b>请你选择你要上传的文件</b>";}else{Byte[] FileByteArray = new Byte[FileLength]; //图象文件临时储存Byte数组Stream StreamObject = UpFile.InputStream; //建立数据流对像//读取图象文件数据,FileByteArray为数据储存体,0为数据指针位置、FileLnegth为数据长度StreamObject.Read(FileByteArray,0,FileLength);//建立SQL Server链接SqlConnection Con = new SqlConnection("DataSource=Localhost;Initial Catalog=testdb;User ID=sa;Pwd=;");String SqlCmd = "INSERT INTO ImageStore (ImageData,ImageContentType, ImageDescription, ImageSize) valueS (@Image,@ContentType, @ImageDescription, @ImageSize)";SqlCommand CmdObj = new SqlCommand(SqlCmd, Con);CmdObj.Parameters.Add("@Image",SqlDbType.Binary, FileLength).value = FileByteArray;CmdObj.Parameters.Add("@ContentType",SqlDbType.VarChar,50).value = UpFile.ContentType; //记录文件类型 //把其它单表数据记录上传CmdObj.Parameters.Add("@ImageDescription",SqlDbType.VarChar,200).value = txtDescription.Text;//记录文件长度,读取时使用CmdObj.Parameters.Add("@ImageSize", SqlDbType.BigInt,8).value = UpFile.ContentLength;Con.Open();CmdObj.ExecuteNonQuery();Con.Close();txtMessage.Text = "<p><b>OK!你已经成功上传你的图片</b>";//提示上传成功}}catch (Exception ex){txtMessage.Text = ex.Message.ToString();}}}}//----------------------------------------------------------------------//好了,图片已经上传到数据库,现在还要干什么呢?当然是在数据库中读取及显示在Web页中啦,请看以下程序://ReadImage.aspx程序内容如下:/-----------------------------------------------------------------------<%@ Page Inherits="ReadImage.MainDisplay" SRC="ReadImage.cs"%>//----------------------------------------------------------------------//ReadImage.cs程序内容如下:using System;using System.Data;using System.Data.SqlClient;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.HtmlControls;namespace ReadImage {public class MainDisplay : System.Web.UI.Page {public void Page_Load(System.Object sender, System.EventArgs e) { int ImgID = Convert.ToInt32(Request.QueryString["ImgID"]);//ImgID为图片ID//建立数据库链接SqlConnection Con = new SqlConnection("Data Source=KING;InitialCatalog=testdb;User ID=sa;Pwd=;");String SqlCmd = "SELECT * FROM ImageStore WHERE ImageID = @ImageID";SqlCommand CmdObj = new SqlCommand(SqlCmd, Con);CmdObj.Parameters.Add("@ImageID", SqlDbType.Int).value = ImgID;Con.Open();SqlDataReader SqlReader = CmdObj.ExecuteReader();SqlReader.Read();Response.ContentType = (string)SqlReader["ImageContentType"];//设定输出文件类型//输出图象文件二进制数制Response.OutputStream.Write((byte[])SqlReader["ImageData"], 0,(int)SqlReader["ImageSize"]);Response.End();Con.Close();//很简单吧^_^}}}//--------------------------------------------------------------------//最后,我们当然要把它在Web页面显示出来啦//ShowImage.hml<html><body>这个是从数据库读取出来的图象:<img src="ReadImage.aspx?ImgID=1"><body></html> 000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000将图片插入数据库并使用读取出来的正确方作者:佚名文章来源:不详点击数:68 更新时间:2006-11-7书写本文是因为今天见到CSDN的首页上一篇存在明显失误的名为“在中从sqlserver检索(retrieve)图片”的文章。

相关主题