NET Programming.
در این مقاله درباره نحوه ذخیره کردن عکس در پایگاه داده 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#.NET |
|
private byte[] ConvertImageToByte(string ImageLocation) { byte[] picture = File.ReadAllBytes(ImageLocation); return picture; } |
| VB.NET |
|
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#.NET |
|
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.NET |
|
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 استفاده کرد که نحوه نوشتن دستورات آن هیچ تفاوتی ندارد که توصیه می شود ازاین نوع داده استفاده کنید.