Demo hình ảnh

Một phần của tài liệu luận văn tìm hiểu về cơ sở dữ liệu đa phương tiện và hệ quản trị cơ sở dữ liệu đa phương tiện từ đó xây dựng mô phỏng một cơ sở dữ liệu đa phương tiện (Trang 78 - 83)

Trong phần này là chúng ta có thể hiểu thêm được cách lưu và đọc ảnh trực tiếp vào cơ sở dữ liệu, chứ không phải lưu đường dẫn của nó . Tôi sẽ giới thiệu với các bạn về cách chúng ta ghi và đọc với kiểu dữ liệu Image trong Sql Server 2005 với Asp.net ngôn ngữ C# .

Đầu tiên tạo 1 Database tên Sample, với bảng Picture có các trường như hình sau:

Hình 3.1: Table Picture

Tạo 1 Project Demo ứng dụng WindowsForm. Trong đó có 1 Form tên Image với các Controls như sau:

- 1 Button với tên button1(Chọn và Lưu ảnh vào DB) để chọn ảnh từ bộ nhớ

máy tính lưu ảnh vào database

- 1 ListBox với tên listbox1 để hiển thị tên ảnh vừa them vào DB - 1 ListBox với tên listBox2 để hiển thị tên ảnh đã có trong DB - 1 PictureBox với tên pictureBox1 để hiển thị ảnh với chế độ Auto Size

Hình 3.2: Giao diện Demo hình ảnh

Ta có chuổi kết nối với database như sau : string c_string = @"Data Source=.\SQLEXPRESS; Initial Catalog=Sample; Integrated Security=True";

Tiếp theo chúng ta thực hiện insert Image vào trong databse. Ta viết code cho Event button1_Click như sau:

Khi thực hiện Click vào button1 thì hiển thị 1 OpenDileDialog cho phép chúng ta lựa chọn ảnh.

OpenFileDialog dlg = new OpenFileDialog();

dlg.Filter = "All Pictures|*.bmp;*.gif;*.jpg|Bitmaps|*.bmp|GIFs|*.gi f|

JPEGs|*.jpg";

if ( dlg.ShowDialog() ==DialogResult.OK )

{

string name=dlg.FileName.Substring(dlg.FileName.LastIndex Of(@"\")+1

,dlg.FileName.Length-dlg.FileName.LastIndexOf(@"\")-1); }

Tiếp theo chúng ta tạo 1 đối tượng MemoryStream để đọc Image thành byte[]

MemoryStream mstr = new MemoryStream();

pictureBox1.Image.Save(mstr, pictureBox1.Image.RawFormat); byte[] arrImage = mstr.GetBuffer();

Chuổi câu lệnh để insert image vào database, với 2 tham số @PName,

@Pic

string cmd = "insert into Picture (PictureName, Picture) values (@PName,

@Pic)";

Tiếp theo chúng ta thực hiện Insert Image và database đồng thời Add tên Image này lên ListBox listBox1

SqlConnection c = new SqlConnection(c_string); // tạo đối tượng kết

nối mới

SqlCommand comm = new SqlCommand(cmd,c); comm.Parameters.Add( new SqlParameter("@PName",

SqlDbType.VarChar,40)).Value = name;

comm.Parameters.Add( new (adsbygoogle = window.adsbygoogle || []).push({});

SqlParameter("@Pic",SqlDbType.Image)).Value = arrImage; try

{

c.Open();

} catch(SqlException err) { MessageBox.Show(err.Message); } finally { c.Close(); } listBox1.Items.Add(name);

Đã thực hiện xong quá trình lưu ảnh vào database.

Việc tiếp theo chúng ta phải làm là Đọc các Image vừa thêm vào Database thông qua các tên ảnh có trong ListBox1. Chúng ta viết Code cho

Event listBox1_SelectedIndexChanged như sau:

if (listBox1.SelectedIndex >= 0) {

string cmd = "select Picture from Picture where PictureID=" + (listBox1.SelectedIndex + listBox2.Items.Count) + ";";

SqlConnection cc = newSqlConnection(c_string); SqlCommand com = new SqlCommand(cmd, cc); try

{

cc.Open();

byte[] b = (byte[])com.ExecuteScalar();

pictureBox1.Image = System.Drawing.Image.FromStream(mem);

}

catch (Exception ee) { MessageBox.Show(ee.Message); } finally { cc.Close(); } }

Để biết các ảnh đã được lưu trữ trong DB trước đó, ta thêm ListBox2 để hiển thị tên ảnh, dùng Event listBox2_SelectedIndexChanged để hiển thị ảnh ra pictureBox1. Code cho Event như sau:

if (listBox2.SelectedIndex >= 0) {

string cmd = "select Picture from Picture where PictureID=" + listBox2.SelectedIndex + ";";

SqlConnection cc = newSqlConnection(c_string); SqlCommand com = new SqlCommand(cmd, cc); try

{

cc.Open();

byte[] b = (byte[])com.ExecuteScalar();

pictureBox1.Image = System.Drawing.Image.FromStream(mem);

}

catch (Exception ee) { MessageBox.Show(ee.Message); } finally { cc.Close(); } }

Một phần của tài liệu luận văn tìm hiểu về cơ sở dữ liệu đa phương tiện và hệ quản trị cơ sở dữ liệu đa phương tiện từ đó xây dựng mô phỏng một cơ sở dữ liệu đa phương tiện (Trang 78 - 83)