![C从SQL数据库中读取和存入_第1页](http://file4.renrendoc.com/view/540ae5da72f5ae83239e2ffa8bbef570/540ae5da72f5ae83239e2ffa8bbef5701.gif)
![C从SQL数据库中读取和存入_第2页](http://file4.renrendoc.com/view/540ae5da72f5ae83239e2ffa8bbef570/540ae5da72f5ae83239e2ffa8bbef5702.gif)
![C从SQL数据库中读取和存入_第3页](http://file4.renrendoc.com/view/540ae5da72f5ae83239e2ffa8bbef570/540ae5da72f5ae83239e2ffa8bbef5703.gif)
![C从SQL数据库中读取和存入_第4页](http://file4.renrendoc.com/view/540ae5da72f5ae83239e2ffa8bbef570/540ae5da72f5ae83239e2ffa8bbef5704.gif)
![C从SQL数据库中读取和存入_第5页](http://file4.renrendoc.com/view/540ae5da72f5ae83239e2ffa8bbef570/540ae5da72f5ae83239e2ffa8bbef5705.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C#从SQL 数据库中读取和存入图片本实例主要介绍如何将图片存入数据库。将图片存入数据库,首先要在数据库中建立一张表,将存储图片的字段类型设为Image类型,用FileStream类、BinaryReader把图片读成字节的形式,赋给一个字节数组,然后用ADO.SqlCommand对象的ExecuteNonQuery()方法来把数据保存到数据库中。主要代码如下: private void button1_Click(object sender, EventArgs e) openFileDialog1.Filter = *jpg|*.JPG|*.GIF|*.GIF|*.BMP|*.BMP; i
2、f(openFileDialog1.ShowDialog()=DialogResult.OK) string fullpath =openFileDialog1.FileName;/文件路径 FileStream fs = new FileStream(fullpath, FileMode.Open); byte imagebytes =new bytefs.Length; BinaryReader br = new BinaryReader(fs); imagebytes = br.ReadBytes(Convert.ToInt32(fs.Length); /打开数据库 SqlConnect
3、ion con = new SqlConnection(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.ParametersImageList.Value = imagebytes; com.ExecuteNonQuery(); con.Close(); 本实例主要介绍如何从数据库中
4、把图片读出来。实现本实例主要是利用SqlDataReader从数据库中把Image字段值读出来,赋给一个byte字节数组,然后使用MemoryStream类与Bitmap把图片读取出来。主要代码如下: private void button1_Click(object sender, EventArgs e) byte imagebytes = null; /打开数据库 SqlConnection con = new SqlConnection(server=(local);uid=sa;pwd=;database=db_05); con.Open(); SqlCommand com = ne
5、w 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 = new MemoryStream(imagebytes); Bitmap bmpt = new Bitmap(ms); pictureBox1.Image = bmpt; 本实例主要介绍如何只允许输入指定图片格式。
6、用OpenFileDialog控件打开图片文件,只要将OpenFileDialog控件的Filter属性指定为特定的图片格式即可。例如,打开.bmp文件的图片,主要代码如下:this.openFileDialog1.Filter = bmp文件(*.bmp)|*.bmp;在用pictureBox控件输入图片时,要想统一图片大小,只需把控件的SizeMode属性值设为StretchImage即可,StretchImage值表示图像的大小将调整为控件的大小。这样,图片的大小就统一了。ASP.NET下上传图片到数据库,并且读出图片 首先在SQL Server中建立一个图片存储的数库表,ImageDa
7、ta 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 var
8、char (200) COLLATE Chinese_PRC_CI_AS NULL , ImageSize int NULL ) ON PRIMARY TEXTIMAGE_ON PRIMARY*/ /UpLoadImage.aspx程序内容如下:上传图片 上传图片(选择你要上传的图片) 文件说明(添加上传图片说明,如:作者、出处) /UpLoadImage.cs程序内容如下:using System;using System.Web;using System.IO;using System.Data;using System.Data.SqlClient;using System.Web.UI
9、;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 B
10、utton_Submit(System.Object sender, System.EventArgs e) HttpPostedFile UpFile = UP_FILE.PostedFile; /HttpPostedFile对象,用于读取图象文件属性FileLength = UpFile.ContentLength; /记录文件长度 try if (FileLength = 0) /文件长度为零时 txtMessage.Text = 请你选择你要上传的文件; else Byte FileByteArray = new ByteFileLength; /图象文件临时储存Byte数组 Stre
11、am StreamObject = UpFile.InputStream; /建立数据流对像 /读取图象文件数据,FileByteArray为数据储存体,0为数据指针位置、FileLnegth为数据长度 StreamObject.Read(FileByteArray,0,FileLength); /建立SQL Server链接 SqlConnection Con = new SqlConnection(Data Source=Localhost;Initial Catalog=testdb;User ID=sa;Pwd=;); String SqlCmd = INSERT INTO Image
12、Store (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.Va
13、rChar,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(); t
14、xtMessage.Text = OK!你已经成功上传你的图片;/提示上传成功 catch (Exception ex) txtMessage.Text = ex.Message.ToString();/好了,图片已经上传到数据库,现在还要干什么呢?当然是在数据库中读取及显示在Web页中啦,请看以下程序:/ReadImage.aspx程序内容如下:/ /ReadImage.cs程序内容如下:using System;using System.Data;using System.Data.SqlClient;using System.Web.UI;using System.Web.UI.WebC
15、ontrols;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.QueryStringImgID); /ImgID为图片ID /建立数据库链接 SqlConnection Con = new SqlConnection(Data Source=KIN
16、G;Initial Catalog=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();
17、Response.ContentType = (string)SqlReaderImageContentType;/设定输出文件类型 /输出图象文件二进制数制 Response.OutputStream.Write(byte)SqlReaderImageData, 0, (int)SqlReaderImageSize); Response.End(); Con.Close(); /很简单吧_/最后,我们当然要把它在Web页面显示出来啦/ShowImage.hml这个是从数据库读取出来的图象:0000000000000000000000000000000000000000000000000000
18、0000000000000000000000000000000000000000000000000000000000将图片插入数据库并使用读取出来的正确方 作者:佚名 文章来源:不详 点击数:68 更新时间:2006-11-7 书写本文是因为今天见到CSDN的首页上一篇存在明显失误的名为“在Asp.Net中从sqlserver检索(retrieve)图片”的文章。不说其错误是因为用其方法确实能从数据库中读取出图片并显示在浏览器,说其失误是因为代码的意图不能被完全的实现,作者也似乎对http协议以及浏览器在处理http数据的流程一知半解。 1、如何出错 以下是这片文章提到的方法: Public
19、Sub Page_Load(sender As Object, e As EventArgs) Dim myConnection As New SqlConnection(ConfigurationSettings.AppSettings(ConnectionString) Dim myCommand As New SqlCommand(Select * from Person, myConnection) Try myConnection.Open() Dim myDataReader as SqlDataReader myDataReader = myCommand.ExecuteRead
20、er(CommandBehavior.CloseConnection) Do While (myDataReader.Read() Response.ContentType = myDataReader.Item(PersonImageType) Response.BinaryWrite(myDataReader.Item(PersonImage) Loop myConnection.Close() Response.Write(Person info successfully retrieved!) Catch SQLexc As SqlException Response.Write(Re
21、ad Failed : & SQLexc.ToString() End Try End Sub 显然,编程者是想将Person表中所有的记录中的PersonImage字段所存储的图片一次性地输出到浏览器中,并且在输出成功地情况下在已输出的图片的下方打印出“Person info successfully retrieved!”信息。然而事实上上述代码仅仅能正确地输出第一条记录中的图片。对于浏览器来说,一个http请求获取一个文件(html或者图片),所以以上代码的输出将被作为一个文件(类型依据Response.ContentType = myDataReader.Item(PersonImag
22、eType)定)被浏览器处理。如果http相应的类型是image/jpeg之类的图片,则浏览器使用相应的图片解析功能对这一个图片文件进行解析。因此,上述代码的显示结果只能是第一条记录PersonImage字段的图片。后面的记录输出的图片数据将成为第一张图片的多余数据(此点具有普遍性,但并非绝对,依图片的格式而定),从而后面的“Person info successfully retrieved!”的信息也自然无法本显示出来,因为这些信息已经是图片文件里面的编码了。 2、正确的做法 A、将图片输入到数据库中,以下是一个将图片输入到数据库的代码片断:(完整的DEMO程序见附录一) FileStre
23、am fs=File.OpenRead(filePath.Text); byte content=new bytefs.Length; fs.Read(content, 0,content.Length); fs.Close(); SqlConnection conn=new SqlConnection(Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=DatabaseImage;Data Source=(local); conn.Open(); SqlCommand comm=conn.CreateCom
24、mand(); comm.CommandText=insert into Images(Image, contentType) values(image, contentType); comm.CommandType=CommandType.Text; comm.Parameters.Add(image, SqlDbType.Image).Value=content; comm.Parameters.Add(contentType, SqlDbType.NVarChar).Value= GetContentType(new FileInfo(filePath.Text).Extension.R
25、emove(0,1); if(comm.ExecuteNonQuery()=1) MessageBox.Show(Successfully insert image into database!); else MessageBox.Show(Failed to insert image into database); conn.Close(); B、将数据库中的图片读出来的代码片断:(完整DEMO程序见附录二) try SqlConnection conn=new SqlConnection(Integrated Security=SSPI;Persist Security Info=Fals
26、e;Initial Catalog=DatabaseImage;Data Source=(local); conn.Open(); SqlCommand comm=conn.CreateCommand(); comm.CommandText=select * from Images where id=id; comm.CommandType=CommandType.Text; comm.Parameters.Add(id, SqlDbType.BigInt).Value=int.Parse(Requestid); SqlDataReader reader=comm.ExecuteReader(
27、); while(reader.Read() Response.ContentType=readercontentType.ToString(); Response.BinaryWrite(byte)readerImage); Response.End(); conn.Close(); catch Response.End(); 这段代码可置于Page_Load事件中,数据图片要注意的两点是: 一、 设置正确的ContentType(http中的content-type),图片的content-type格式一般为image/*,如jpeg为image/jpeg,bmp为image/bmp等等。
28、 二、 仅仅输出一张图片二进制流, 中Page_Load事件先于页面输出被触发,因此图片的输出可以在此事件中进行,直接操作Reponse对象,避免输出与图片无关的而外信息(额外的第二张图片或者文字)。图片的二进制流输出后及时使用Response.End()方法结束http响应,避免页面中的额外信息被的引擎默认输出到客户端。 希望此文能够起到抛砖引玉的作用!_ 附录一: MainForm.cs using System; using System.Drawing; using System.Collections; using System.ComponentModel; using Syste
29、m.Data; using System.Data.SqlClient; using System.IO; using System.Windows.Forms; namespace InsertImageToDatabase public class MainForm : System.Windows.Forms.Form private System.Windows.Forms.OpenFileDialog openFileDlg; private System.Windows.Forms.TextBox filePath; private System.Windows.Forms.But
30、ton browseButton; private System.Windows.Forms.Button insertButton; / / Required designer variable. / private System.ComponentModel.Container components = null; public MainForm() / / Required for Windows Form Designer support / InitializeComponent(); / / TODO: Add any constructor code after Initiali
31、zeComponent call / / / Clean up any resources being used. / protected override void Dispose( bool disposing ) if( disposing ) if (components != null) components.Dispose(); base.Dispose( disposing ); #region Windows Form Designer generated code / / Required method for Designer support - do not modify
32、 / the contents of this method with the code editor. / private void InitializeComponent() this.openFileDlg = new System.Windows.Forms.OpenFileDialog(); this.filePath = new System.Windows.Forms.TextBox(); this.browseButton = new System.Windows.Forms.Button(); this.insertButton = new System.Windows.Fo
33、rms.Button(); this.SuspendLayout(); / / openFileDlg / this.openFileDlg.DefaultExt = *.jpg;*.gif;*.bmp;*.png; this.openFileDlg.Filter = Image Files|*.jpg;*.gif;*.bmp;*.png|All Files|*.*; / / filePath / this.filePath.Location = new System.Drawing.Point(16, 16); this.filePath.Name = filePath; this.file
34、Path.ReadOnly = true; this.filePath.Size = new System.Drawing.Size(168, 20); this.filePath.TabIndex = 0; this.filePath.Text = ; / / browseButton / this.browseButton.Location = new System.Drawing.Point(200, 16); this.browseButton.Name = browseButton; this.browseButton.TabIndex = 1; this.browseButton.
35、Text = &Browse; this.browseButton.Click += new System.EventHandler(this.browseButton_Click); / / insertButton / this.insertButton.Enabled = false; this.insertButton.Location = new System.Drawing.Point(200, 56); this.insertButton.Name = insertButton; this.insertButton.TabIndex = 2; this.insertButton.
36、Text = &Insert; this.insertButton.Click += new System.EventHandler(this.insertButton_Click); / / MainForm / this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(292, 273); this.Controls.Add(this.insertButton); this.Controls.Add(this.browseButton); this.C
37、ontrols.Add(this.filePath); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; this.MaximizeBox = false; this.Name = MainForm; this.Text = Insert Image to Database; this.ResumeLayout(false); #endregion / / The main entry point for the application. / STAThread static void Main()
38、 Application.Run(new MainForm(); private void browseButton_Click(object sender, System.EventArgs e) if(openFileDlg.ShowDialog()=DialogResult.OK) filePath.Text=openFileDlg.FileName; insertButton.Enabled=true; private void insertButton_Click(object sender, System.EventArgs e) FileStream fs=File.OpenRe
39、ad(filePath.Text); byte content=new bytefs.Length; fs.Read(content, 0,content.Length); fs.Close(); SqlConnection conn=new SqlConnection(Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=DatabaseImage;Data Source=(local); conn.Open(); SqlCommand comm=conn.CreateCommand(); comm.Comm
40、andText=insert into Images(Image, contentType) values(image, contentType); comm.CommandType=CommandType.Text; SqlParameter param=comm.Parameters.Add(image, SqlDbType.Image); param.Value=content; comm.Parameters.Add(contentType, SqlDbType.NVarChar).Value= GetContentType(new FileInfo(filePath.Text).Extension.Remove(0,1); if(comm.ExecuteNon
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 有关抵押借款合同范文
- oem委托加工合同协议常用范本年
- 变电站安装工程承包合同模板
- 2024年高考英语 (全国甲卷)真题详细解读及评析
- 个人商品购销合同
- 2025年外研版九年级历史下册月考试卷含答案
- 货物运输合同、法规与保险
- 2025年外研版九年级历史下册阶段测试试卷
- 造纸机购买合同
- 民政局离婚的协议书范本
- 开工第一课安全培训内容
- 湖北省石首楚源“源网荷储”一体化项目可研报告
- 经颅磁刺激增强定神状态的研究
- 2024年国新国际投资有限公司招聘笔试参考题库含答案解析
- 食堂餐厅服务方案投标方案(技术标)
- Creo-7.0基础教程-配套课件
- 六年级人教版上册数学计算题练习题(及答案)100解析
- 超声科质量控制制度及超声科图像质量评价细则
- 初中物理沪粤版八年级下册《第六章 力和机械》章节练习(含答案)
- 金矿管理制度
- 桥梁桩基础施工概述及施工控制要点
评论
0/150
提交评论