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

Lữu trữ hình ảnh vào cơ sở dữ liệu với C#
“Làm thế nào chúng ta có thể lưu trữ hình ảnh vào cơ sở dữ liệu và truy cập
chúng trở lại?”, đây là câu hỏi thường gặp trong lập trình cơ sở dữ 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. Ứng dụng còn lại sẽ truy xuất cơ sở dữ liệu và
hiển thị những thông tin đó. Để tạo hai ứng dụng này chúng ta cần tạo một cơ
sở dữ liệu có tên ‘book’, trong đó có một bảng là ‘bookinfo’ với các trường dữ
liệu sau: bookname(char), author(char), logo(image). Ở đây logo đại diện cho
hình bìa của sách.Ứng dụng đầu tiên Với ứng dụng đầu tiên, chúng ta tạo ứng
dụng WinForm và thiết kế chúng như hình sau:
Sử dụng các control với tên như 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 các thông
tin về sách vào cơ sở dữ liệu.
Trước khi có thể nhập thông tin vào cơ sở dữ liệu, chúng ta cần khởi tạo 1 kết
nối đến cơ sở dữ liệu ‘book’ của chúng ta. Để làm được điều này, bên trong lớp
Form1 bạn cần bổ sung các biến sau:
String constr; //chuỗi xác định kết nối với cơ sở dữ 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 trong constructor của lớp

thị hộp thoại và kiểm tra xem người dùng có chọn ảnh không. Nếu có, chúng ta
gán giá trị của thuộc tính FileName của ofd cho thuộc tính Text của file text
box.Sau khi đã nhập vào đầy đủ, người dùng nhấn nút ‘Insert’ để lưu thông tin
vào cơ sở dữ liệu. Để thực hiện điều này chúng ta cần xử lý hàm
insert_Click,hàm quản lý sự 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, chúng ta tạo 1 đối tượng thuộc lớp FileStream với các đối số khởi tạo
là tên file chứa trong các file.Text và kiểu là FileMode.Open. Tiếp theo,chúng
ta tạo 1 mảng buff kiểu byte có chiều dài bằng với chiều dài của đối tượng f.
Kế tiếp dùng hàm Read() để đọc nội dung của f vào mảng buff.Tiếp theo tạo
chuỗi truy vấn cmdstr để thêm thông tin vào cơ sở dữ liệu. Trong câu truy vấn
trên, ta đã sử dụng các tham số hình thức @b, @a, @l chúng lần lươt đại diện
cho các trường dữ liệu book, author,
logo trong bảng ‘bookinfo’.
Điểm tiện lợi trong việc sử dụng các tham số hình thức đó là khi cần thay đổi
giá trị của một hay tất cả các trường ta khôngcần phải viết lại toàn bộ câu truy
vấn mà chỉ cần dựa trên các tham số hình thức tương ứng với file đó mà cập

khẩu>”;
con = new SqlConnection ( constr );
cmdstr = “Select * from bookinfo”; com = new SqlCommand ( cmdstr, con );
Bạn cũng nên bổ sung đoạn mã sau để mở cơ sở dữ liệu và hiển thị thông tin về
quyển sách đầu tiên:
con.Open( );
r = com.ExecuteReader( );
if ( r.Read( ) )
{
bookl.Text = r [ 0 ].ToString( );
authorl.Text = r [ 1 ].ToString( );
byte[ ] b = ( byte[ ] ) r [ 2 ];
MemoryStream st = new MemoryStream( );
st.Write ( b, 0, b.Length );
Image i = Image.FromStream ( st );
img.Image = i ;
}
Sau khi mở được kết nối đến cơ sở dữ liệu, chúng ta lấy được một tham khảo
của đối tượng SqlDataReader trong r bằng 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
tại bản ghi (record) nào trong bảng ‘bookinfo’ không. Nếu có, chúng ta lấy các
thông tin về tên sách, tên tác giả hiển thị trong các hộp textbox tương ứng. Bây
giờ, chúng ta cần phải hiển thị hình trang bìa của sách. Đầu tiên chúng ta dùng
1 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
của mảng b trong hộp Picture Box vì nó không có định dạng là file Bitmap file
hình) nên ta cần chuyển nội dung mảng b sang định dạng của l file bitmap. Để
làm điều này,chúng ta tạo 1 đối tượng st của lớp MemoryStream. Lớp
MemoryStream chỉ dùng để khởi tạo những đối tượng lưu trữ dữ liệu tạm thời
trong bộ nhớ. Tiếp theo,ta dùng phương thức Write() của lớp MemoryStream
để ghi dữ liệu của mảng b vào luồng dữ liệu st. Sau đó, chúng ta tạo 1 file


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status