يلخص هذا المقال كيفية تخزين الصور في SQL Server وقراءتها وعرضها في .Net WinForm و.Net WebForm (asp.net).
1. استخدم asp.net لرفع الصورة وتخزينها في SQL Server، ثم قراءتها من SQL Server وعرضها:
1) التحميل والحفظ في SQL Server
هيكل قاعدة البيانات
إنشاء اختبار الجدول
{
الهوية (1،1)،
صورة الصورة
}
الإجراءات المخزنة ذات الصلة
إنشاء صورة UpdateImage
(
@تحديث الصورة
)
مثل
أدخل في قيم الاختبار (FIImage) (@UpdateImage)
يذهب
أضف ما يلي إلى ملف UpPhoto.aspx:
<معرف الإدخال = "UpPhoto" اسم = "UpPhoto" runat = "الخادم" نوع = "ملف">
<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;
byte[] PhotoArray=new Byte[upPhotoLength];
Stream PhotoStream=upPhoto.InputStream;
PhotoStream.Read(PhotoArray,0,upPhotoLength);
// الاتصال بقاعدة البيانات
SqlConnection conn=new SqlConnection();
conn.ConnectionString = "مصدر البيانات = مضيف محلي؛ قاعدة البيانات = اختبار؛ معرف المستخدم = 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="أدخل في قيم الاختبار (FIImage)(@FIImage)";
//SqlCommand cmd=new SqlCommand(strSql,conn);
//cmd.Parameters.Add("@FIImage",SqlDbType.Image);
//cmd.Parameters["@FIImage"].Value=PhotoArray;
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
2) اقرأ من SQL Server واعرضه وأضف الكود التالي حيث يجب عرض الصورة:
<asp:image id="imgPhoto" runat="server" ImageUrl="ShowPhoto.aspx"></asp:image>
كود نص ShowPhoto.aspx:
Page_Load باطلة خاصة (مرسل الكائن، System.EventArgs e)
{
إذا (!Page.IsPostBack)
{
SqlConnection conn=جديد SqlConnection()
conn.ConnectionString = "مصدر البيانات = مضيف محلي؛ قاعدة البيانات = اختبار؛ معرف المستخدم = sa؛ Pwd = sa"؛
string strSql = "select * from test Where id=2";// افترض هنا أنه تم الحصول على الصورة ذات المعرف 2
SqlCommand cmd=new SqlCommand(strSql,conn);
conn.Open();
SqlDataReader Reader=cmd.ExecuteReader();
read();
Response.ContentType="application/octet-stream";
Response.BinaryWrite((Byte[])reader["FIImage"]);
Response.End();
Reader.Close();
}
}
2. احفظ الصورة في SQL Server في WinForm، واقرأها من SQL Server واعرضها في Picturebox
1) تخزينها في SQL Server
بنية قاعدة البيانات والإجراءات المخزنة المستخدمة هي نفسها المذكورة أعلاه أولاً، قم بإضافة عنصر تحكم OpenFileDialog إلى النموذج وقم بتسميته ofdSelectPic؛
ثم أضف زر فتح الملف في النموذج وأضف رمز حدث النقر التالي:
دفق مللي؛
بايت[] بيك بايت؛
//ofdSelectPic.ShowDialog();
إذا (ofdSelectPic.ShowDialog()==DialogResult.OK)
{
إذا ((ms=ofdSelectPic.OpenFile())!=null)
{
//MessageBox.Show("موافق");
picbyte=new byte[ms.Length];
ms.Position=0;
ms.Read(picbyte,0,Convert.ToInt32(ms.Length));
//MessageBox.Show("اكتملت القراءة!");
// الاتصال بقاعدة البيانات
SqlConnection conn=new SqlConnection();
conn.ConnectionString = "مصدر البيانات = مضيف محلي؛ قاعدة البيانات = اختبار؛ معرف المستخدم = 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.Open();
cmd.ExecuteNonQuery();
conn.Close();
ms.Close();
}
}
2) القراءة والعرض في مربع الصور أولاً، أضف مربع صور باسم ptbShow
ثم أضف زرًا وأضف حدث الاستجابة التالي:
SqlConnection conn=new SqlConnection();
conn.ConnectionString = "مصدر البيانات = مضيف محلي؛ قاعدة البيانات = اختبار؛ معرف المستخدم = sa؛ Pwd = sa"؛
string strSql = "اختر FImage من الاختبار حيث المعرف = 1"؛
SqlCommand cmd=new SqlCommand(strSql,conn);
conn.Open();
SqlDataReader Reader=cmd.ExecuteReader();
read();
MemoryStream ms=new MemoryStream((byte[])reader["FIImage"])
;
Reader.Close();
conn.Close();
ptbShow.Image=image;
العنوان الأصلي: http://stewen.cnblogs.com/archive/2005/12/20/300587.aspx