Cách lưu hình ảnh vào database trong C Sharp

Database là Microsoft SQL Server
1. Tạo database có tên: TestImageDB với 1 bảng có tên tblImages và có cấu trúc như hình sau:
dbimage_cs_03.png


2. Tạo stored project có tên InsertImage với sql script như sau:
CREATE PROCEDURE InsertImage
@filename nvarchar(250),
@blobdata image
AS
insert into tblImages values(
@filename, @blobdata
)
3. Tạo Windows Form Application Project có tên AnotherWay.
4. Tạo lớp ConnectDB.cs có nội dung như sau:

using System;
using System.Collections.Generic;
using System.IO;
using System.Data;
using System.Data.SqlClient;
namespace AnotherWay
{
class ConnectDB
{
private SqlConnection conn;
private string connectionString = "Server=.;UID=sa;PWD=;Initial Catalog=TestImageDB";
public ConnectDB()
{
conn = new SqlConnection(connectionString);
}
public void StorePicture(string filename)
{
byte[] imageData = null;
// Read the file into a byte array
using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read))
{
imageData = new Byte[fs.Length];
fs.Read(imageData, 0, (int)fs.Length);
}
using (SqlConnection conn = new SqlConnection(connectionString))
{
SqlCommand cmd = new SqlCommand("InsertImage", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@filename", filename);
cmd.Parameters["@filename"].Direction = ParameterDirection.Input;
cmd.Parameters.Add("@blobdata", SqlDbType.Image);
cmd.Parameters["@blobdata"].Direction = ParameterDirection.Input;
// Store the byte array within the image field
cmd.Parameters["@blobdata"].Value = imageData;
conn.Open();
cmd.ExecuteNonQuery();
}
}
public byte[] RetrieveImage()
{
byte[] imageData = null;
conn.Open();
SqlCommand cmd = new SqlCommand("select blobdata from tblImages", conn);
// Assume previously established command and connection
// The command SELECTs the IMAGE column from the table
using (SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess))
{
reader.Read();
// Get size of image data - pass null as the byte array parameter
long bytesize = reader.GetBytes(0, 0, null, 0, 0);
// Allocate byte array to hold image data
imageData = new byte[bytesize];
long bytesread = 0;
int curpos = 0;
int chunkSize = 1;
while (bytesread < bytesize)
{
// chunkSize is an arbitrary application defined value
bytesread += reader.GetBytes(0, curpos, imageData, curpos, chunkSize);
curpos += chunkSize;
}
}
conn.Close();
// byte array 'imageData' now contains BLOB from database
return imageData;
}
}
}
5. Thiết kế Form như hình
dbimage_cs_04.png


6. Code cho Form:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
namespace AnotherWay
{
public partial class Form1 : Form
{
private ConnectDB conDB;
public Form1()
{
InitializeComponent();
conDB = new ConnectDB();
}
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog dlg = new OpenFileDialog();
dlg.Filter = "JPG Files(*.JPG)|*.JPG|GIF Files(*.GIF)|*.GIF";
if (dlg.ShowDialog(this) == DialogResult.OK)
{
conDB.StorePicture(dlg.FileName);
}
}
private void button2_Click(object sender, EventArgs e)
{
byte[] img = conDB.RetrieveImage();
MemoryStream str = new MemoryStream(img);
pictureBox1.Image = Image.FromStream(str);
}
}
}
7. Thực thi
Trước hết nhấn nút Lưu, sau đó muốn xem lại mẫu tin đã lưu, nhấn nút load.
dbimage_cs_05.png


Chúc thành công!
Theo vovanhai
Nguồn: Cách lưu hình ảnh vào database trong C sharp (P2)
________________________________________________________________________________
Nghề kiểm thử phần mềm bạn đã biết chưa?
 

VnKienthuc lúc này

Không có thành viên trực tuyến.

Định hướng

Diễn đàn VnKienthuc.com là nơi thảo luận và chia sẻ về mọi kiến thức hữu ích trong học tập và cuộc sống, khởi nghiệp, kinh doanh,...
Top