บทความนี้สรุปวิธีจัดเก็บรูปภาพใน SQL Server รวมถึงอ่านและแสดงใน .Net WinForm และ .Net WebForm (asp.net)
1. ใช้ asp.net เพื่ออัพโหลดอิมเมจและจัดเก็บไว้ใน SQL Server จากนั้นอ่านจาก SQL Server แล้วแสดง:
1) อัปโหลดและบันทึกลงใน SQL Server
โครงสร้างฐานข้อมูล
สร้างการทดสอบตาราง
-
ตัวตน (1,1)
F รูปภาพ
-
ขั้นตอนการจัดเก็บที่เกี่ยวข้อง
สร้าง proc UpdateImage
-
@อัพเดตรูปภาพรูปภาพ
-
เช่น
แทรกเข้าไปในค่าทดสอบ (FImage) (@ UpdateImage)
ไป
เพิ่มสิ่งต่อไปนี้ลงในไฟล์ UpPhoto.aspx:
<input id="UpPhoto" name="UpPhoto" runat="server" type="file">
<asp:Button id="btnAdd" name="btnAdd" runat="server" Text="Upload"></asp:Button>
จากนั้นเพิ่มรหัสประมวลผลเหตุการณ์คลิกของปุ่ม btnAdd ในไฟล์โค้ดหลัง UpPhoto.aspx.cs:
โมฆะส่วนตัว btnAdd_Click (ผู้ส่งวัตถุ System.EventArgs e)
-
//รับรูปภาพและแปลงรูปภาพเป็นไบต์[]
HttpPostedFile upPhoto=UpPhoto.PostedFile;
int upPhotoLength=upPhoto.ContentLength;
ไบต์ [] PhotoArray = ไบต์ใหม่ [upPhotoLength];
สตรีม PhotoStream=upPhoto.InputStream;
PhotoStream.Read(PhotoArray,0,upPhotoLength);
//เชื่อมต่อกับฐานข้อมูล
SqlConnection conn=การเชื่อมต่อ SqlConnection ใหม่();
conn.ConnectionString="แหล่งข้อมูล=localhost;Database=test;User Id=sa;Pwd=sa";
SqlCommand cmd=new SqlCommand("UpdateImage",conn);
cmd.CommandType=CommandType.StoredProcedure;
cmd.Parameters.Add("@UpdateImage",SqlDbType.Image);
cmd.Parameters["@UpdateImage"].Value=PhotoArray;
//หากคุณต้องการเพิ่มรูปภาพโดยไม่ใช้ขั้นตอนการจัดเก็บ ให้เปลี่ยนโค้ดสี่บรรทัดด้านบนเป็น:
//string strSql="ใส่ค่าทดสอบ(FImage)(@FImage)";
//SqlCommand cmd=new SqlCommand(strSql,conn);
//cmd.Parameters.Add("@FImage",SqlDbType.Image);
//cmd.Parameters["@FImage"].Value=PhotoArray;
conn.เปิด();
cmd.ExecuteNonQuery();
conn.ปิด();
-
2) อ่านจาก SQL Server และแสดงรหัสต่อไปนี้ที่ต้องการแสดงรูปภาพ:
<asp:image id="imgPhoto" runat="server" ImageUrl="ShowPhoto.aspx"></asp:image>
รหัสเนื้อหา ShowPhoto.aspx:
โมฆะส่วนตัว Page_Load (ผู้ส่งวัตถุ System.EventArgs e)
-
ถ้า(!หน้าIsPostBack)
-
SqlConnection conn=SqlConnection ใหม่()
conn.ConnectionString="แหล่งข้อมูล=localhost;Database=test;User Id=sa;Pwd=sa";
string strSql="select * from test โดยที่ id=2";//สมมติว่าที่นี่ได้รับรูปภาพที่มี id 2
SqlCommand cmd=ใหม่ SqlCommand(strSql,conn);
conn.เปิด();
เครื่องอ่าน SqlDataReader=cmd.ExecuteReader();
reader.Read();
Response.ContentType = "แอปพลิเคชัน / octet-stream";
Response.BinaryWrite ((ไบต์ []) เครื่องอ่าน ["FImage"]);
การตอบสนองสิ้นสุด();
reader.ปิด();
-
}
2. บันทึกรูปภาพไปยัง SQL Server ใน WinForm อ่านจาก SQL Server และแสดงในกล่องรูปภาพ
1) เก็บไว้ใน SQL Server
โครงสร้างฐานข้อมูลและขั้นตอนการจัดเก็บที่ใช้เหมือนกับข้างต้น ขั้นแรก ให้เพิ่มตัวควบคุม OpenFileDialog ลงในแบบฟอร์มและตั้งชื่อเป็น dSelectPic
จากนั้น เพิ่มปุ่มเปิดไฟล์บนแบบฟอร์ม และเพิ่มรหัสเหตุการณ์การคลิกต่อไปนี้:
สตรีม ms;
ไบต์ [] พิกไบต์;
//ofdSelectPic.ShowDialog();
ถ้า (ofdSelectPic.ShowDialog()==DialogResult.OK)
-
ถ้า ((ms=ofdSelectPic.OpenFile())!=null)
-
//MessageBox.Show("ตกลง");
picbyte=ไบต์ใหม่[ms.Length];
ms.ตำแหน่ง=0;
ms.Read(picbyte,0,Convert.ToInt32(ms.Length));
//MessageBox.Show("อ่านเสร็จแล้ว!");
//เชื่อมต่อกับฐานข้อมูล
SqlConnection conn=การเชื่อมต่อ SqlConnection ใหม่();
conn.ConnectionString="แหล่งข้อมูล=localhost;Database=test;User Id=sa;Pwd=sa";
SqlCommand cmd=new SqlCommand("UpdateImage",conn);
cmd.CommandType=CommandType.StoredProcedure;
cmd.Parameters.Add("@UpdateImage",SqlDbType.Image);
cmd.Parameters["@UpdateImage"].Value=picbyte;
conn.เปิด();
cmd.ExecuteNonQuery();
conn.ปิด();
ms.ปิด();
-
-
2) อ่านและแสดงในกล่องรูปภาพ ขั้นแรก เพิ่มกล่องรูปภาพชื่อ ptbShow
จากนั้น เพิ่มปุ่มและเพิ่มเหตุการณ์การตอบกลับต่อไปนี้:
SqlConnection conn=การเชื่อมต่อ SqlConnection ใหม่();
conn.ConnectionString="แหล่งข้อมูล=localhost;Database=test;User Id=sa;Pwd=sa";
string strSql="เลือก FImage จากการทดสอบโดยที่ id=1";
SqlCommand cmd=ใหม่ SqlCommand(strSql,conn);
conn.เปิด();
เครื่องอ่าน SqlDataReader=cmd.ExecuteReader();
reader.Read();
MemoryStream ms=new MemoryStream((byte[])reader["FImage"]);
รูปภาพรูปภาพ=Image.FromStream(ms,true);
reader.ปิด();
conn.ปิด();
ptbShow.Image=รูปภาพ;
ที่อยู่เดิม: http://stewen.cnblogs.com/archive/2005/12/20/300587.aspx