ذخیره و بازیابی عکس در دیتابیس
سلام دوستان.
من تو اینترنت هر چی گشتم نتونستم یه کد قابل فهم برای ذخیره عکس تو دیتابیس پیدا کنم.
می خواستم لطف کنید و برام یه کد بنویسید که بتونم باهاش تو سی شارپ یه عکس رو بدم به برنامه و ذخیره بشه تو دیتابیس.
بعد هم بتونم بازیابیش کنم.
البته اگه میشه یه کد قابل فهم و ساده بنویسید.
ممنون.:20:
چگونگی ذخیره کردن عکس در پایگاه داده Sql Server
سلام.
برای ذخیره کردن عکس در فیلدی از جداول پایگاه داده خود در Sql Server باید نوع فیلد را Image انتخاب کرد البته برای پایگاه داده اکسس باید نوع فیلد داده را OLE Object انتخاب کرد.
فرض می کنم جدولی با نام Student به صورت زیر در پایگاه داده ای با نام School داریم:
کد:
create table Student(stcode int primary key identity(1,1),stimage image)
برای ذخیره سازی عکس باید آنرا به صورت مجموعه ای از بایتها ذخیره کرد برای این کار در NET. کلاسی با نام فایل داریم که در این کلاس متدی به نام ReadAllBytes وجود دارد این متد آدرس عکس در کامپیوتر را گرفته و آنرا به صورت مجموعه ای از بایتها می خواند .
برای راحتی کار تابعی به نام ConvertImageToByte را به صورت زیر تعریف می کنیم:
کد:
C#
private byte[] ConvertImageToByte(string ImageLocation)
{
byte[] picture = File.ReadAllBytes(ImageLocation);
return picture;
}
VB
Private Function ConvertImageToByte(ByVal ImageLocation As String) As Byte()
Dim picture As Byte() = File.ReadAllBytes(ImageLocation)
Return picture
End Function
این تابع آدرس عکس موجود در کامپیوتر را گرفته و آنرا به صورت مجموعه ای از بایتها خوانده و در متغیری به نام picture که به صورت آرایه ای از بایت تعریف شده ذخیره می کند.
بقیه کار نوشتن دستور Insert برای درج کردن رکوردی در پایگاه داده :
فرض می کنیم عکس با نام test.png در کنار فایل exe برنامه داریم
کد:
C#
SqlConnection con = new SqlConnection();
con.ConnectionString = "Data Source=.;Initial Catalog=School;Integrated Security=true";
con.Open();
SqlCommand com = new SqlCommand();
com.Connection = con;
com.CommandText = "Insert into Student(stimage) values (@stimage)";
com.Parameters.AddWithValue("@stimage", ConvertImageToByte(Application.StartupPath + @"\test.png"));
com.ExecuteNonQuery();
con.Close();
VB
Dim con As New SqlConnection
con.ConnectionString = "Data Source=.;Initial Catalog=School;Integrated Security=true"
con.Open()
Dim com As New SqlCommand
com.Connection = con
com.CommandText = "Insert Into Student (stimage) values(@stimage)"
com.Parameters.AddWithValue("@stimage", ConvertImageToByte(Application.StartupPath + "\test.png"))
com.ExecuteNonQuery()
con.Close()
دستورات بالا را در رویداد کلیک button خود بنویسید.
حالا اگر به دیتابیس خود بروید و جدول خود را باز کنید می بینید در قسمت فیلد مربوط به عکس عبارت <Binary data> نوشته شده است اما اگر می خواهید کدهای عددی را ببینید در یک New Query دستور زیر را اجرا کنید:
کد:
select * from Student
نکته 1 : از نوع داده ای image فقط برای ذخیره سازی عکس استفاده نمی شود و می توان از این نوع برای ذخیره سازی فیلم و موسیقی و هرچیز دیگر استفاده کرد.
نکته 2 : به جای نوع داده image می توان از نوع (varbinary(max استفاده کرد که نحوه نوشتن دستورات آن هیچ تفاوتی ندارد که توصیه می شود ازاین نوع داده استفاده کنید.
موفق باشید:10:.