LƯU HÌNH ẢNH VÀO DATABASE 1 2 3 4 5 MỤC ĐÍCH TẠO CƠ SỞ DỮ LiỆU GIAO DiỆN FORM CHÍNH TẠO LỚP KẾT NỐI CƠ SỞ DỮ LiỆU LƯU HÌNH ẢNH VÀO DATABASE... Tuy nhiên, lưu trữ hình ảnh vào databas
Trang 1LƯU HÌNH ẢNH VÀO DATABASE
NGUYỄN HUY THẮNG 09520660
BÙI CHÍ THIỆN 09520662
Trang 2LƯU HÌNH ẢNH VÀO DATABASE
1
2
3
4
5
MỤC ĐÍCH
TẠO CƠ SỞ DỮ LiỆU
GIAO DiỆN FORM CHÍNH
TẠO LỚP KẾT NỐI CƠ SỞ DỮ LiỆU
LƯU HÌNH ẢNH VÀO DATABASE
Trang 3Đôi khi bạn cần lưu trữ hình ảnh trong cơ sở dữ liệu thay vì các tập tin vật lý Ứng dụng này trên Windows Form giúp cho người lập trình tạo ra một giao diên thân thiện và dễ sử dụng cho người dùng Tuy nhiên, lưu trữ hình ảnh vào database cũng có một khuyết điểm lớn làm cho tập tin trở nên tốn bộ nhớ
Đối với các tập tin dạng Text(văn bản) như txt,doc,rtf,html…thì bạn có thể đọc toàn
bộ nội dung tập tin vào một chuỗi String và lưu chuỗi đó vào database Kiểu khai báo
dữ liệu trong database có thể là text,varchar, nvarchar tuỳ thuộc vào cơ sở dữ liệu bạn thiết kế.
MỤC ĐÍCH
Trang 4Đối với tập tin binary (tập tin nhị phân) như com,exe, jpg,bmp,…thì nội dung cần khai báo vào một mảng Byte (khai báo trong chương trình là Byte[]) và lưu mảng này vào Database, kiểu dữ liệu trong database là Binary.
MỤC ĐÍCH
Trang 5TẠO CƠ SỞ DỮ LiỆU
Database trong SQLServer:
Ta tạo một database hình ảnh với tên là QLHinh trong SQLServer với 2 thuộc tính là IDHinh (thuộc tính khoá chính)và Picture như sau:
Trang 6Giao diện gồm: picturebox, datagridwiew, textbox (Ma Hinh), button (Mo Hinh, Lưu vào Database, Đóng Ứng Dụng)
GIAO DiỆN FORM CHÍNH:
Trang 7Trước hết, ta tạo một lớp có tên là ketnoi.cs Lớp này dùng để đọc dữ liệu từ database cũng như cập nhật dữ liệu xuống Database
Ta khai báo các đối tượng: sqlConnection, Dataset, sqlAdapter
SqlConnection: dùng để chỉ rõ là chúng ta kết nối đến đâu Để chỉ định các thông tin như Server Name, Database Name, Authentication thì ta cần phải truyền vào cho constructor của lớp SqlConnection một chuỗi kết nối (Connection String).Nói một cách tổng quát, chuỗi kết nối là cách chúng ta truyền vào thông tin cách thức kết nối đến nguồn dữ liệu Ví dụ, xét chuỗi kết nối sau: “Data Source=.\sqlexpress;Initial
Catalog=AdventureWorksLT2008;Integrated Security=True”
TẠO LỚP KẾT NỐI VỚI CƠ SỞ DỮ LiỆU
Trang 8DataSet: đây là đối tượng mà sẽ chứa toàn bộ dữ liệu chúng ta truy xuất được từ database Ứng dụng của chúng ta sẽ thao tác trên dữ liệu trong DataSet này Sử dụng DataSet cho phép chúng ta chỉ truy xuất dữ liệu từ database 1 lần duy nhất và kết nối đến Database sẽ được ngắt đi ngay sau khi truy xuất
SqlDataAdapter: đối tượng của lớp này hoạt động như là một cầu nối để đưa
dữ liệu từ database đổ vào DataSet Đối tượng lớp này chịu trách nhiệm tự
động quản lý đóng mở kết nối đến database
TẠO LỚP KẾT NỐI VỚI CƠ SỞ DỮ LiỆU
Trang 9Mô hình quan hệ giữa DataSet, SqlDataAdapter, SQL
TẠO LỚP KẾT NỐI VỚI CƠ SỞ DỮ LiỆU
Trang 10 Để lấy tất cả mẫu tin trong Database ta khai báo.
public DataSet daQLH()
{
ds = new DataSet();
daHinh = new SqlDataAdapter("select* from Hinh",con); //tao va lap day DataSet
daHinh.Fill(ds,"Hinh");
return ds;
}
TẠO LỚP KẾT NỐI VỚI CƠ SỞ DỮ LiỆU
Trang 11Method Fill(), method này là một đặc trưng của ADO.NET được cung cấp để truyền dữ liệu các DataSet và nó TỰ ĐỘNG mở kết nối khi gọi nó nếu như kết nối không được mở Và sau khi Fill vào DataSet thì lại tự động đóng kết nối Mọi việc ở đây nằm trong quyền kiểm soát của cái Adapter.
Khi lưu hình ảnh xong ta cần cập nhật sự thay đổi trong CSDL.
TẠO LỚP KẾT NỐI VỚI CƠ SỞ DỮ LiỆU
Trang 12public void CapNhatHinh ()
{
try
{
SqlCommandBuilder cmdb = new SqlCommandBuilder(daHinh); daHinh.Update(ds, "Hinh");
//return bd;
}
catch(Exception e)
{
//bat loi
Console.WriteLine(e.Message);
}
}
LỚP KẾT NỐI
Trang 13 Để đọc dữ liệu hình ảnh ra ta dùng 1 mảng Byte để chứa giá trị của field Picture Sau đó muốn hiển thị nó lên PictureBox ta phải dùng
MemoryStream để đưa ra:
try
{
Byte[] i = (byte[])row["Picture"];
Image.FromStream(MstmData);
}
LƯU HÌNH ẢNH VÀO DATABASE
Trang 14 Để cập nhật dữ liệu vào database, ta phải lấy ảnh từ PictureBox vào 1
MemoryStream:
{
MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); }
LƯU HÌNH ẢNH VÀO DATABASE
Trang 15 Để cập nhật dữ liệu vào database, ta phải lấy ảnh từ PictureBox vào 1
MemoryStream:
{
MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); }
LƯU HÌNH ẢNH VÀO DATABASE