Introduction
This article is about storing and retrieving images from database in Microsoft .NET using C#.
Tools Used
- SQL Server 2000
- Microsoft .NET Version 1.1
- C# (Windows Forms based application)
Storing Images
- Create a table in a SQL Server 2000 database which has at least one field of type
IMAGE.Here is the script I used:
CollapseCREATE TABLE [dbo].[tblImgData] ( [ID] [int] NOT NULL , [Name] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [Picture] [image] NULL ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] - Actually
IMAGEfield is just holding the reference to the page containing the binary data so we have to convert our image into bytes.- I used a file open dialog box to locate the file.
Collapsethis.openFileDialog1.ShowDialog(this); string strFn=this.openFileDialog1.FileName;
- By using
FileInfoclass, I retrieved the file size:
CollapseFileInfo fiImage=new FileInfo(strFn);
- Declare an array of that size.
Collapsethis.m_lImageFileLength=fiImage.Length; m_barrImg=new byte[Convert.ToInt32(this.m_lImageFileLength)];
- By using
FileStreamobject, I filled the byte array.
CollapseFileStream fs=new FileStream(strFn,FileMode.Open, FileAccess.Read,FileShare.Read); int iBytesRead=fs.Read(m_barrImg,0, Convert.ToInt32(this.m_lImageFileLength)); fs.Close();
Complete Load Image Code
Collapseprotected void LoadImage() { try { this.openFileDialog1.ShowDialog(this); string strFn=this.openFileDialog1.FileName; this.pictureBox1.Image=Image.FromFile(strFn); FileInfo fiImage=new FileInfo(strFn); this.m_lImageFileLength=fiImage.Length; FileStream fs=new FileStream(strFn,FileMode.Open, FileAccess.Read,FileShare.Read); m_barrImg=new byte[Convert.ToInt32(this.m_lImageFileLength)]; int iBytesRead = fs.Read(m_barrImg,0, Convert.ToInt32(this.m_lImageFileLength)); fs.Close(); } catch(Exception ex) { MessageBox.Show(ex.Message); } } - I used a file open dialog box to locate the file.
- Saving byte array data to database.
- Create command text to insert record.
Collapsethis.sqlCommand1.CommandText= "INSERT INTO tblImgData(ID,Name,Picture)" + " values(@ID,@Name,@Picture)";
- Create parameters.
Collapsethis.sqlCommand1.Parameters.Add("@ID", System.Data.SqlDbType.Int, 4); this.sqlCommand1.Parameters.Add("@Name", System.Data.SqlDbType.VarChar, 50); this.sqlCommand1.Parameters.Add("@Picture", System.Data.SqlDbType.Image);Notice “
@Picture” has “SqlDbType.Image” because it is ofIMAGEtype Field. - Provide the value to the parameters.
Collapsethis.sqlCommand1.Parameters["@ID"].Value=this.editID.Text; this.sqlCommand1.Parameters["@Name"].Value=this.editName.Text; this.sqlCommand1.Parameters["@Picture"].Value=this.m_barrImg;
“
this.m_barrImg” is a byte array which we filled in the previous step. - Now execute non-query for saving the record to the database.
Collapseint iresult=this.sqlCommand1.ExecuteNonQuery();
Complete Save Image Code
Collapseprivate void btnSave_Click(object sender, System.EventArgs e) { try { this.sqlConnection1.Open(); if (sqlCommand1.Parameters.Count ==0 ) { this.sqlCommand1.CommandText="INSERT INTO tblImgData(ID," + " Name,Picture) values(@ID,@Name,@Picture)"; this.sqlCommand1.Parameters.Add("@ID", System.Data.SqlDbType.Int,4); this.sqlCommand1.Parameters.Add("@Name", System.Data.SqlDbType.VarChar,50); this.sqlCommand1.Parameters.Add("@Picture", System.Data.SqlDbType.Image); } this.sqlCommand1.Parameters["@ID"].Value=this.editID.Text; this.sqlCommand1.Parameters["@Name"].Value=this.editName.Text; this.sqlCommand1.Parameters["@Picture"].Value=this.m_barrImg; int iresult=this.sqlCommand1.ExecuteNonQuery(); MessageBox.Show(Convert.ToString(iresult)); } catch(Exception ex) { MessageBox.Show(ex.Message); } finally { this.sqlConnection1.Close(); } } - Create command text to insert record.
Retrieving Image
Retrieving images from the database is the exact reverse process of saving images to the database.
- First create command text to retrieve record.
CollapseSqlCommand cmdSelect = new SqlCommand("select Picture" + " from tblImgData where ID=@ID", this.sqlConnection1); - Create parameter for the query.
CollapsecmdSelect.Parameters.Add("@ID",SqlDbType.Int,4); - Provide value to the parameter.
CollapsecmdSelect.Parameters["@ID"].Value=this.editID.Text;
- Open database connection and execute “
ExecuteScalar” because we want only “IMAGE” column data back.
Collapsebyte[] barrImg=(byte[])cmdSelect.ExecuteScalar();
As the execute scalar returns data of “
Object” data type, we cast it tobytearray. - Save this data to a temporary file.
Collapsestring strfn=Convert.ToString(DateTime.Now.ToFileTime()); FileStream fs=new FileStream(strfn,FileMode.CreateNew,FileAccess.Write); fs.Write(barrImg,0,barrImg.Length); fs.Flush(); fs.Close();
- And display the image anywhere you want to display.
CollapsepictureBox1.Image=Image.FromFile(strfn);
Complete Image Retrieving Code
Collapse
private void btnLoad_Click(object sender, System.EventArgs e)
{
try
{
SqlCommand cmdSelect=new SqlCommand("select Picture" +
" from tblImgData where ID=@ID",this.sqlConnection1);
cmdSelect.Parameters.Add("@ID",SqlDbType.Int,4);
cmdSelect.Parameters["@ID"].Value=this.editID.Text;
this.sqlConnection1.Open();
byte[] barrImg=(byte[])cmdSelect.ExecuteScalar();
string strfn=Convert.ToString(DateTime.Now.ToFileTime());
FileStream fs=new FileStream(strfn,
FileMode.CreateNew, FileAccess.Write);
fs.Write(barrImg,0,barrImg.Length);
fs.Flush();
fs.Close();
pictureBox1.Image=Image.FromFile(strfn);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
this.sqlConnection1.Close();
}
}
Bibliography
- Retrieving Images from SQL Server in ASP.NET
- Images, Thumbnails, SQL Server, and ASP.NET - Level 200
License
This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.
A list of licenses authors might use can be found here
About the Author
Occupation:
Web Developer
Location:
Sweden
本文介绍如何使用C#在Microsoft.NET环境下将图片存储到SQL Server 2000数据库,并从数据库中检索出来。文章详细展示了创建数据库表、读取图片文件并将其转换为字节数组进行存储的过程,同时也提供了从数据库读取图片数据并显示的方法。
158

被折叠的 条评论
为什么被折叠?



