Lưu trữ hình ảnh vào cơ sở dữ liệu với C#

5 99 0
Lưu trữ hình ảnh vào cơ sở dữ liệu với C#

Đang tải... (xem toàn văn)

Thông tin tài liệu

Trong bài này chúng ta sẽ khảo sát cách thức lưu trữ hình ảnh trong cơ sở dữ liệu và hiển thị chúng dùng ADO. NET. Chúng ta sẽ tạo hai ứng dụng. Một ứng dụng để lưu trữ các thông tin về sách như tên tác giả, tên sách, hình minh họa trang bìa vào cơ sở dữ liệu.

Lữu trữ hình ảnh vào sở liệu với C# “Làm lưu trữ hình ảnh vào sở liệu truy cập chúng trở lại?”, câu hỏi thường gặp lập trình sở liệu Trong khảo sát cách thức lưu trữ hình ảnh sở liệu hiển thị chúng dùng ADO NET Chúng ta tạo hai ứng dụng Một ứng dụng để lưu trữ thông tin sách tên tác giả, tên sách, hình minh họa trang bìa vào sở liệu Ứng dụng cịn lại truy xuất sở liệu hiển thị thơng tin Để tạo hai ứng dụng cần tạo sở liệu có tên ‘book’, có bảng ‘bookinfo’ với trường liệu sau: bookname(char), author(char), logo(image).Ở logo đại diện cho hình bìa sách.Ứng dụng Với ứng dụng đầu tiên, tạo ứng dụng WinForm thiết kế chúng hình sau: Sử dụng control với tên bảng sau: Book Name Textbox book Author Textbox author Image Textbox file Browse button browse Insert button insert Nút 'brower' dùng để chọn hình trang bìa, nút ‘Insert’ dùng để đưa thơng tin sách vào sở liệu Trước nhập thông tin vào sở liệu, cần khởi tạo kết nối đến sở liệu ‘book’ Để làm điều này, bên lớp Form1 bạn cần bổ sung biến sau: String constr; //chuỗi xác định kết nối với sở liệu ‘book’ SqlConnection con; //đối tượng kết nối Bạn cần bổ sung thêm khai báo namespace System.Data.SqlClient đầu chương trình để kích hoạt lớp SqlConnection.Bên constructor lớp Form1, bạn cần khởi tạo kết nối mở sở liệu ‘book’: -//tạo chuỗi kết nối constr= “server database=books;uid=sa;pwd=”; //tạo đối tượng kết nối con=new SqlConnection(constr); //mở kết nối con.Open(); Trong đó: - server: tên server - database: tên sở liệu - uid,pwd: username password truy cập server Sau mở kết nối đến server sở liệu, người dùng nhập vào thơng tin tên sách, tên tác giả, lựa chọn hình ảnh cho trang bìa Để lựa chọn hình trang bìa ta cần phải xử lí kiện xảy nút ‘Browse’ nhấn vào Dưới hàm xử lí: -Private void browse_Click ( object sender,EventArgs e ) { OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter="Image files|*.jpg"; if ( ofd.ShowDialog( ) == DialogResult.OK ) file.Text=ofd.FileName; } -Trong đoạn mã tạo đối tượng lớp OpenFileDialog có tên ofd Dùng thuộc tính Filter để lọc lấy loại file mà ta quan tâm đến trường hợp file ảnh jpg Sau gọi hàm ShowDialog() để hiển thị hộp thoại kiểm tra xem người dùng có chọn ảnh khơng Nếu có, gán giá trị thuộc tính FileName ofd cho thuộc tính Text file text box.Sau nhập vào đầy đủ, người dùng nhấn nút ‘Insert’ để lưu thông tin vào sở liệu Để thực điều cần xử lý hàm insert_Click,hàm quản lý kiện click lên nút Insert: -Private void insert_Click ( object sender,EventArgs e ) { FileStream f = new FileStream(file.Text, FileMode.Open ) ; byte[ ] buff = new byte [ f.Length ] ; f.Read ( buff, 0, ( int ) f.Length ) ; string cmdstr = “Insert into bookinfo values ( @b,@a, @l )” ; SqlCommand com = new SqlCommand ( cmdstr,con ) ; com.Parameters.Add ( “@b”, book.Text ) ; com.Parameters.Add ( “@a”, author.Text ) ; com.Parameters.Add ( “@l”, buff ) ; com.ExecuteNonQuery( ) ; con.Close( ) ; } Đầu tiên, tạo đối tượng thuộc lớp FileStream với đối số khởi tạo tên file chứa file.Text kiểu FileMode.Open Tiếp theo,chúng ta tạo mảng buff kiểu byte có chiều dài với chiều dài đối tượng f Kế tiếp dùng hàm Read() để đọc nội dung f vào mảng buff.Tiếp theo tạo chuỗi truy vấn cmdstr để thêm thông tin vào sở liệu Trong câu truy vấn trên, ta sử dụng tham số hình thức @b, @a, @l chúng lần lươt đại diện cho trường liệu book, author, logo bảng ‘bookinfo’ Điểm tiện lợi việc sử dụng tham số hình thức cần thay đổi giá trị hay tất trường ta khơngcần phải viết lại tồn câu truy vấn mà cần dựa tham số hình thức tương ứng với file mà cập nhật lại liệu Thuộc tính Parameters lớp SqlCommand chứa tất tham số tham chiếu đến đối tượng SqlParameterCollection Chúng ta truyền giá trị cho tham số cách gọi phương thức Add() lớp SqlParameterCollection Kế tiếp, gọi phương thức ExecuteNonquery() để thực thi câu truy vấn gọi hàm Close() để đóng kết nối với sở liệu Trong ứng dụng này, bạn cần bổ sung namespace System.IO để dùng lớp FileStream Ứng dụng thứ hai Bây tạo ứng dụng thứ hai để truy cập hiển thị liệu bảng ‘bookinfo’ Bạn thiết kế ứng dụng WinForm hình sau: Xác định control với tên tương ứng sau: - Book Name Label bookl - Author Label authorl - Picture Box img - Next Button next Khi người dùng nhấn nút ‘Next’, thông tin sách sở liệu hiển thị.Bổ sung thêm biến vào lớp Form1: -string constr; SqlConnection con; string cmdstr; SqlCommand com; SqlDataReader r; Khởi tạo biến contructor sau gọi phương thức InitializeComponent() bên dưới: constr = “serverdatabase=books;uid=sa;pwd = ”; = new SqlConnection ( constr ); cmdstr = “Select * from bookinfo”; com = new SqlCommand ( cmdstr, ); -Bạn nên bổ sung đoạn mã sau để mở sở liệu hiển thị thông tin sách đầu tiên: -con.Open( ); r = com.ExecuteReader( ); if ( r.Read( ) ) { bookl.Text = r [ ].ToString( ); authorl.Text = r [ ].ToString( ); byte[ ] b = ( byte[ ] ) r [ ]; MemoryStream st = new MemoryStream( ); st.Write ( b, 0, b.Length ); Image i = Image.FromStream ( st ); img.Image = i ; } Sau mở kết nối đến sở liệu, lấy tham khảo đối tượng SqlDataReader r cách gọi phương thức ExecuteReader() Tiếp theo, ta gọi phương thức Read() để kiểm tra xem có tồn ghi (record) bảng ‘bookinfo’ khơng Nếu có, lấy thông tin tên sách, tên tác giả hiển thị hộp textbox tương ứng Bây giờ, cần phải hiển thị hình trang bìa sách Đầu tiên dùng mảng b kiểu byte để lưu trữ hình cần hiển thị Do khơng thể hiển thị nội dung mảng b hộp Picture Box khơng có định dạng file Bitmap file hình) nên ta cần chuyển nội dung mảng b sang định dạng l file bitmap Để làm điều này,chúng ta tạo đối tượng st lớp MemoryStream Lớp MemoryStream dùng để khởi tạo đối tượng lưu trữ liệu tạm thời nhớ Tiếp theo,ta dùng phương thức Write() lớp MemoryStream để ghi liệu mảng b vào luồng liệu st Sau đó, tạo file bitmap cách dùng phương thức constructor lớp Image có đối số tham khảo đến đối tượng lớp MemoryStream Kế chúng tahiển thị hình ảnh hộp Picture Box Ngay người dùng nhấn ‘Next’ hàm next_Click() gọi để xử lí Đoạn mã cho hàm next_Click() sau: private void next_Click ( object sender,EventArgs e ) { if ( r.Read( ) ) { bookl.Text = r [ ].ToString( ) ; authorl.Text = r [ ] ToString( ) ; byte[ ] b = ( byte[ ] ) r [ ] ; MemoryStream st = new MemoryStream( ) ; st.Write ( b, 0, b.Length ) ; Image i = Image.FromStream ( st ) ; img.Image = i ; } } -Đoạn mã xử lí bên hàm tương tự cách lấy thông tin sách Mỗi người dùng nhấn nút ‘Next’ thông tin sách sở liệu ‘book’ hiển thị Tổng kết Hy vọng viết giúp bạn hiểu cách thức ứng dụng tương tác với sở liệu thủ thuật giúp bạn lưu trữ trực tiếp hình ảnh vào sở liệu Tuy nhiên, cách làm thích hợp để lưu trữ hình ảnh nhỏ Đối với hình ảnh lớn phương pháp trở nên khơng hiệu quả, bạn cần tìm hiểu cách thức khác để lưu trữ; chẳng hạn thay lưu nội dung hình ảnh, lưu trữ đường dẫn tương đối Chúc thành cơng (Theo: Mai Phúc Tiến - Báo Học Lập trình) ... thích hợp để lưu trữ hình ảnh nhỏ Đối với hình ảnh lớn phương pháp trở nên khơng hiệu quả, bạn cần tìm hiểu cách thức khác để lưu trữ; chẳng hạn thay lưu nội dung hình ảnh, lưu trữ đường dẫn... ‘Next’ thông tin sách sở liệu ‘book’ hiển thị Tổng kết Hy vọng viết giúp bạn hiểu cách thức ứng dụng tương tác với sở liệu thủ thuật giúp bạn lưu trữ trực tiếp hình ảnh vào sở liệu Tuy nhiên, cách... tên sở liệu - uid,pwd: username password truy cập server Sau mở kết nối đến server sở liệu, người dùng nhập vào thông tin tên sách, tên tác giả, lựa chọn hình ảnh cho trang bìa Để lựa chọn hình

Ngày đăng: 21/05/2021, 13:32

Tài liệu cùng người dùng

Tài liệu liên quan