Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 19 kết quả

Đề tài: Cách chèn ảnh vào csdl trong Access và load ảnh lên form C# ??

  1. #1
    Ngày gia nhập
    10 2010
    Bài viết
    77

    Mặc định Cách chèn ảnh vào csdl trong Access và load ảnh lên form C# ??

    các bạn giúp mình với , mình đang cần để làm bt. bạn nào có bản demo thì càng tốt, thanks

  2. #2
    Ngày gia nhập
    04 2011
    Bài viết
    53

    Trong bài viết này tôi sẽ hướng dẫn bạn cách chèn hình ảnh trực tiếp vào database. Cách này tuy làm cho database lớn/nặng nhưng nó cũng giải quyết rất nhiều vấn đề trong quá trình lập trình.
    Ở đây, csdl tôi sử dụng là ms Access và MS SQLserver.
    Cách 1: Database là Access
    1. Bạn tạo 1 file access có tên TestDB.mdb nằm trong thư mục bin\debug của ứng dụng(chỗ khác cũng không sao, tùy).Tạo 1 bảng có tên tblSinhvien có cấu trúc như sau:

    Tên field Kiểu dữ liệu
    MSSV Text(15)
    hinhAnh OLE Object
    2. Tạo 1 Windows Form Application Project có tên Store_Retrieve_Image_From_DB.

    3. Tạo lớp có tên ConnectDB.cs với nội dung sau:
    Visual C# Code:
    1. using System;
    2. using System.Collections.Generic;
    3. using System.Text;
    4. using System.Data;
    5. using System.Data.OleDb;namespace Store_Retrieve_Image_From_DB
    6. {
    7. public class ConnectDB
    8. {
    9. private OleDbConnection con;
    10. private DataSet ds;
    11. private OleDbDataAdapter daSV;
    12. /// <summary>
    13. /// Phương thức constructor khởi tạo kết nối đến database
    14. /// </summary>
    15. public ConnectDB()
    16. {
    17. {
    18. con = new OleDbConnection();
    19. con.ConnectionString = “Provider=microsoft.jet.OLEDB.4.0;Data Source=+
    20. System.Windows.Forms.Application.StartupPath+”\\TestDB.mdb;
    21. con.Open();
    22. }
    23. catch (Exception)
    24. {
    25. }
    26. }
    27. /// <summary>
    28. /// Lấp về tất cả các mẫu tin trong bảng tblSinhvien
    29. /// </summary>
    30. /// <returns></returns>
    31. public DataSet GetTable()
    32. {
    33. ds = new DataSet();
    34. daSV = new OleDbDataAdapter(select * from tblSinhvien”, con);
    35. daSV.Fill(ds, “tblSinhvien”);
    36. return ds;
    37. }
    38. /// <summary>
    39. /// Cập nhật các thay đổi của người dùng
    40. /// </summary>
    41. public void UpdateSV()
    42. {
    43. {
    44. OleDbCommandBuilder bd = new OleDbCommandBuilder(daSV);
    45. daSV.Update(ds, “tblSinhvien”);
    46. }
    47. catch (Exception)
    48. {
    49. }
    50. }
    51. }
    52. }
    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.

    3. Thiết kế MainForm như hình


    4. Code cho Form:
    Visual C# Code:
    1. using System;
    2. using System.Collections.Generic;
    3. using System.ComponentModel;
    4. using System.Data;
    5. using System.Drawing;
    6. using System.IO;
    7. using System.Windows.Forms;namespace Store_Retrieve_Image_From_DB
    8. {
    9. public partial class MainForm : Form
    10. {
    11. private ConnectDB conDB;
    12. private DataSet ds = new DataSet();
    13. private BindingSource bs;
    14. private DataTable dtSV;
    15. public MainForm()
    16. {
    17. InitializeComponent();
    18.  
    19. }
    20.  
    21. private void MainForm_Load(object sender, EventArgs e)
    22. {
    23. {
    24. conDB = new ConnectDB();
    25. ds = conDB.GetTable();
    26. dtSV = ds.Tables["tblSinhvien"];
    27. bs = new BindingSource(ds, “tblSinhvien”);
    28. bs.CurrentItemChanged += new EventHandler(bs_CurrentItemChanged);
    29. dataGridView1.DataSource = bs;
    30. bindingNavigator1.BindingSource = bs;
    31. }
    32. catch (Exception ex)
    33. {
    34. MessageBox.Show(ex.ToString());
    35. }
    36. }
    37. /// <summary>
    38. /// Sự kiện xảy ra khi binding source có sự thay đổi do người
    39. /// dùng chọn các dòng trên lưới hặc nhấn các nút di chuyển.
    40. /// </summary>
    41. /// <param name=”sender”></param>
    42. /// <param name=”e”></param>
    43. void bs_CurrentItemChanged(object sender, EventArgs e)
    44. {
    45. DataRowView row = (DataRowView)bs.Current;
    46. {
    47. Byte[] i = (byte[])row["hinhAnh"];
    48. MemoryStream stmBLOBData = new MemoryStream(i);
    49. picHinhAnh.Image = Image.FromStream(stmBLOBData);
    50. }
    51. catch (Exception ex)
    52. {
    53. picHinhAnh.Image = null;
    54. MessageBox.Show(ex.ToString());
    55. }
    56. }
    57.  
    58. private void btnLuu_Click(object sender, EventArgs e)
    59. {
    60. {
    61. DataRow dr = dtSV.NewRow();
    62. dr["MSSV"] = txtMSSV.Text;
    63. if (picHinhAnh.Image != null)
    64. {
    65. MemoryStream ms = new MemoryStream();
    66. picHinhAnh.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
    67.  
    68. Byte[] bytBLOBData = new Byte[ms.Length];
    69. ms.Position = 0;
    70. ms.Read(bytBLOBData, 0, Convert.ToInt32(ms.Length));
    71. dr["hinhAnh"] = bytBLOBData;
    72. dtSV.Rows.Add(dr);
    73.  
    74. conDB.UpdateSV();
    75. }
    76. }
    77. catch (Exception ex)
    78. {
    79. MessageBox.Show(ex.ToString());
    80. }
    81. }
    82.  
    83. private void btnLoadHinh_Click(object sender, EventArgs e)
    84. {
    85. OpenFileDialog dlg = new OpenFileDialog();
    86. dlg.Filter = “JPG Files(*.JPG)|*.JPG|GIF Files(*.GIF)|*.GIF;
    87. if (dlg.ShowDialog(this) == DialogResult.OK)
    88. {
    89. picHinhAnh.Image = Image.FromFile(dlg.FileName);
    90. }
    91. }
    92. }
    93. }
    Chú ý:

    Để đọc dữ liệu hình ảnh ra ta dùng 1 mảng Byte để chứa giá trị của field hình ảnh. Sau đó muốn hiển thị nó lên PictureBox ta phải dùng MemoryStream để đưa ra:
    Visual C# Code:
    1. Byte[] i = (byte[])row["hinhAnh"];
    2. MemoryStream stmBLOBData = new MemoryStream(i);
    3. picHinhAnh.Image = Image.FromStream(stmBLOBData);
    Để cập nhật dữ liệu vào db, ta phải lấy ảnh từ PictureBox vào 1 MemoryStream:
    Visual C# Code:
    1. MemoryStream ms = new MemoryStream();
    2. picHinhAnh.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
    Rồi sau đó mới chuyển nó thành mảng Byte rồi cung cấp cho 1 datarow để update xuống database.
    Visual C# Code:
    1. Byte[] bytBLOBData = new Byte[ms.Length];
    2. ms.Position = 0;
    3. ms.Read(bytBLOBData, 0, Convert.ToInt32(ms.Length));
    4. dr["hinhAnh"] = bytBLOBData;
    5. dtSV.Rows.Add(dr);
    Chạy ứng dụng, kết quả như hình sau:


    Cách 2: 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:

    2. Tạo stored project có tên InsertImage với sql script như sau:
    SQL Code:
    1. CREATE PROCEDURE InsertImage
    2. @filename nvarchar(250),
    3. @blobdata image
    4. AS
    5. INSERT INTO tblImages VALUES(
    6. @filename, @blobdata
    7. )
    3. Tạo Windows Form Application Project có tên AnotherWay.

    4. Tạo lớp ConnectDB.cs có nội dung như sau:
    Visual C# Code:
    1. using System;
    2. using System.Collections.Generic;
    3. using System.IO;
    4. using System.Data;
    5. using System.Data.SqlClient;
    6. namespace AnotherWay
    7. {
    8. class ConnectDB
    9. {
    10. private SqlConnection conn;
    11. private string connectionString = “Server=.;UID=sa;PWD=;Initial Catalog=TestImageDB”;
    12.  
    13. public ConnectDB()
    14. {
    15. conn = new SqlConnection(connectionString);
    16. }
    17.  
    18. public void StorePicture(string filename)
    19. {
    20. byte[] imageData = null;
    21. // Read the file into a byte array
    22. using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read))
    23. {
    24. imageData = new Byte[fs.Length];
    25. fs.Read(imageData, 0, (int)fs.Length);
    26. }
    27. using (SqlConnection conn = new SqlConnection(connectionString))
    28. {
    29. SqlCommand cmd = new SqlCommand(“InsertImage”, conn);
    30. cmd.CommandType = CommandType.StoredProcedure;
    31. cmd.Parameters.AddWithValue(“@filename”, filename);
    32. cmd.Parameters["@filename"].Direction = ParameterDirection.Input;
    33. cmd.Parameters.Add(“@blobdata”, SqlDbType.Image);
    34. cmd.Parameters["@blobdata"].Direction = ParameterDirection.Input;
    35. // Store the byte array within the image field
    36. cmd.Parameters["@blobdata"].Value = imageData;
    37. conn.Open();
    38. cmd.ExecuteNonQuery();
    39. }
    40. }
    41.  
    42. public byte[] RetrieveImage()
    43. {
    44. byte[] imageData = null;
    45. conn.Open();
    46. SqlCommand cmd = new SqlCommand(select blobdata from tblImages”, conn);
    47. // Assume previously established command and connection
    48. // The command SELECTs the IMAGE column from the table
    49.  
    50. using (SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess))
    51. {
    52. reader.Read();
    53. // Get size of image data – pass null as the byte array parameter
    54. long bytesize = reader.GetBytes(0, 0, null, 0, 0);
    55. // Allocate byte array to hold image data
    56. imageData = new byte[bytesize];
    57. long bytesread = 0;
    58. int curpos = 0;
    59. int chunkSize = 1;
    60. while (bytesread < bytesize)
    61. {
    62. // chunkSize is an arbitrary application defined value
    63. bytesread += reader.GetBytes(0, curpos, imageData, curpos, chunkSize);
    64. curpos += chunkSize;
    65. }
    66. }
    67. conn.Close();
    68. // byte array ‘imageData’ now contains BLOB from database
    69. return imageData;
    70. }
    71. }
    72. }
    5. Thiết kế Form như hình


    6. Code cho Form:
    Visual C# Code:
    1. using System;
    2. using System.Collections.Generic;
    3. using System.ComponentModel;
    4. using System.Data;
    5. using System.Drawing;
    6. using System.IO;
    7. using System.Windows.Forms;
    8. namespace AnotherWay
    9. {
    10. public partial class Form1 : Form
    11. {
    12. private ConnectDB conDB;
    13. public Form1()
    14. {
    15. InitializeComponent();
    16. conDB = new ConnectDB();
    17. }
    18.  
    19. private void button1_Click(object sender, EventArgs e)
    20. {
    21. OpenFileDialog dlg = new OpenFileDialog();
    22. dlg.Filter = “JPG Files(*.JPG)|*.JPG|GIF Files(*.GIF)|*.GIF;
    23. if (dlg.ShowDialog(this) == DialogResult.OK)
    24. {
    25. conDB.StorePicture(dlg.FileName);
    26. }
    27. }
    28.  
    29. private void button2_Click(object sender, EventArgs e)
    30. {
    31. byte[] img = conDB.RetrieveImage();
    32. MemoryStream str = new MemoryStream(img);
    33. pictureBox1.Image = Image.FromStream(str);
    34. }
    35. }
    36. }
    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.


    VoVanHai
    Chúc thành công!
    Đã được chỉnh sửa lần cuối bởi huuhung : 26-11-2011 lúc 07:16 PM. Lý do: Cho code vào thẻ
    Vu.hoangkim@yahoo.com hân hạnh làm quen với mọi người

  3. #3
    Ngày gia nhập
    10 2010
    Bài viết
    77

    mình đã đọc bài nè rùi nhưng chưa code thành công. có ai đã làm rùi giúp mình với

  4. #4
    Ngày gia nhập
    12 2010
    Bài viết
    683

    @quycondatinh: Sao không bỏ vô tag cho nó dễ nhìn!! khó đọc quá....

    Mà cái code này quen quen .... Hình như là ở 4rum nào đó...

    here

    http://www.mediafire.com/download.php?456lub477cbt15c

    Demo đó....Cái này có quá nhiều....

    Cũng lạ là cái pic này ko bị vô sọt nhỉ???

  5. #5
    Ngày gia nhập
    06 2011
    Bài viết
    52

    Trích dẫn Nguyên bản được gửi bởi thanthoai101010 Xem bài viết
    mình đã đọc bài nè rùi nhưng chưa code thành công. có ai đã làm rùi giúp mình với
    Cái này bạn cứ hiểu như chuyển ảnh về bit rui chèn vao csdl, đến lúc lôi ra thi lai phải chuyển lai để hiển thị image.
    Cách thứ 2 là lưu dạng đường dẫn. tương tự mp3 cũng thế!
    Hix mình dang mắc chỗ lôi video chạy trong asp.net thi chạy kiểu gì. nản phải nộp btl môn đa phương tiện về phần này ma không ai chỉ dùm hixhix
    chickenIT

  6. #6
    Ngày gia nhập
    10 2010
    Bài viết
    77

    Mặc định Cách chèn ảnh vào csdl trong Access và load ảnh lên form C# ??

    Trích dẫn Nguyên bản được gửi bởi cchangkhongayngo Xem bài viết
    @quycondatinh: Sao không bỏ vô tag cho nó dễ nhìn!! khó đọc quá....

    Mà cái code này quen quen .... Hình như là ở 4rum nào đó...

    here

    http://www.mediafire.com/download.php?456lub477cbt15c

    Demo đó....Cái này có quá nhiều....

    Cũng lạ là cái pic này ko bị vô sọt nhỉ???
    tks nhiều. demo này mình đã tải rùi nhưng test k chạy nên mới xin mọi người cái khác.
    mình sẽ cố làm xem. có vấn đề gì mọi người chỉ giùm nhé

  7. #7
    Ngày gia nhập
    10 2010
    Bài viết
    77

    Trích dẫn Nguyên bản được gửi bởi o0ocuchuoio0o Xem bài viết
    Cái này bạn cứ hiểu như chuyển ảnh về bit rui chèn vao csdl, đến lúc lôi ra thi lai phải chuyển lai để hiển thị image.
    Cách thứ 2 là lưu dạng đường dẫn. tương tự mp3 cũng thế!
    Hix mình dang mắc chỗ lôi video chạy trong asp.net thi chạy kiểu gì. nản phải nộp btl môn đa phương tiện về phần này ma không ai chỉ dùm hixhix
    thanks .............

  8. #8
    Ngày gia nhập
    03 2009
    Bài viết
    267

    Trích dẫn Nguyên bản được gửi bởi o0ocuchuoio0o Xem bài viết
    Cái này bạn cứ hiểu như chuyển ảnh về bit rui chèn vao csdl, đến lúc lôi ra thi lai phải chuyển lai để hiển thị image.
    Cách thứ 2 là lưu dạng đường dẫn. tương tự mp3 cũng thế!
    Hix mình dang mắc chỗ lôi video chạy trong asp.net thi chạy kiểu gì. nản phải nộp btl môn đa phương tiện về phần này ma không ai chỉ dùm hixhix
    chạy video thì bạn dùng code HTML nha.

  9. #9
    Ngày gia nhập
    06 2011
    Bài viết
    52

    ? chạy bằng html kiểu gì bạn ơi! mình có 1 danh sách bài hát trong csdl giơ muốn load lên kiểu gì. Trong asp.net nha ^^1 c# mình biết rùi.
    chickenIT

  10. #10
    Ngày gia nhập
    03 2009
    Bài viết
    267

    Trích dẫn Nguyên bản được gửi bởi o0ocuchuoio0o Xem bài viết
    ? chạy bằng html kiểu gì bạn ơi! mình có 1 danh sách bài hát trong csdl giơ muốn load lên kiểu gì. Trong asp.net nha ^^1 c# mình biết rùi.
    Bài hát hay Video?, sao lúc bài hát lúc video nhỉ?.
    Nếu bài hát thì dùng flash + HTML: http://vietboblog.net/forum/showthread.php?t=1459
    Còn nếu là Video bình thường thì có thể dùng thẻ
    Code:
    <OBJECT ID="Player" width="200" height="200"
    classid="clsid:6bf52a52-394a-11d3-b153-00C04f79faa6"
    codebase="http://activex.microsoft.com/activex/controls/mplayer/en/
    nsmp2inf.cab#Version=5,1,52,701"
    standby="Loading Microsoft Windows Media Player components..."
    type="application/x-oleobject" align="center">
    <param name="url" value="666.wmv">
    <param name="AutoStart" value="True">
    <param name="ShowControls" value="True">
    <embed type="application/x-mplayer2"
    pluginspage="http://www.microsoft.com/Windows/Downloads/Contents/Products/MediaPlayer/" src="666.wmv" align="middle" width="200" height="200" showcontrols="1" showdisplay="0" showstatusbar="1"> </embed>
    </OBJECT>

Các đề tài tương tự

  1. Kết nối CSDL thành công, nhưng không biết load lên form
    Gửi bởi choaipro trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 14-03-2012, 08:45 PM
  2. Load hình ảnh từ CSDL Access lên Image trong asp.net
    Gửi bởi pinostarit trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 2
    Bài viết cuối: 15-10-2011, 06:47 PM
  3. Database Load CSDL Chương Trình Trắc Nghiệm Anh Văn lên form?
    Gửi bởi gait trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 6
    Bài viết cuối: 13-04-2011, 11:52 PM
  4. Làm sao load tất cả table và column trong CSDL Access vào Treeview?
    Gửi bởi thuan199 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 16-06-2010, 11:31 AM
  5. load hình từ csdl access lên listview như thế nào??
    Gửi bởi DuyCanh trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 13-10-2009, 05:47 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn