با سلام خدمت دوستان عزيزم.دوستان خوبم من اين كدهارو براي ذخيره و بازيابي عكس توي پايگاه داده اكسس با وي بي دات نت نوشتم.البته با كمك دوست بسيار خوبم مبتكر كد عزيز.واقعا خيلي به دادم رسيد و ازش خيلي ممنونم.
خلاصه خدمتتون عرض كنم من اين كدهارو با مصيبت پيدا كردم و تبديلشون كردم.اميدوارم به دردتون بخوره.تست هم شده و كاملا دقيق كار ميكنه.اگه مورد پسند بود 2تا صلوات بفرستين.مرسي
در ابتدا مفروضات مسئله :
فرض می کنم در پایگاه داده اكسس دیتابیسی با نام School و جدولی به نام Student دارم که فیلد primary key این جدول با نام stcode و فیلدی که تصویر دانش اموز را نگه داری می کند از نوع image و با نام stimage
است و در این جدول دانش آموزی با کد 1 اطلاعات آن وارد شده است.
در ابتدا تابعی به صورت زیر تعریف می کنم :
اين تابع عكس گرفته شده توسط openfilefolder را به كد باينري تبديل ميكنه:
PrivateFunction ConvertImageToByte(ByVal ImageLocation AsString) AsByte()
Dim fs AsNew FileStream(ImageLocation, FileMode.Open, FileAccess.Read)
Dim br AsNew BinaryReader(fs)
Dim picture AsByte()
Dim fInfo AsNew FileInfo(ImageLocation)
Dim numBytes AsLong = fInfo.Length
picture = br.ReadBytes(CInt(numBytes))
Return picture
EndFunction
با كد هاي زير عكس گرفته شده توي پايگاه داده اكسس ذخيره ميشه.
Dim comsave AsNew OleDbCommand()
comsave.Connection = myconnection
comsave.CommandText = "Insert Into student Values (@stcode,@stname,@stimage)";
comsave.Parameters.AddWithValue("@stcode", int.Parse(txtstcode.Text));
comsave.Parameters.AddWithValue("@stname", txtstname.Text);
comsave.Parameters.AddWithValue("@stimage", ConvertImageToByte(openImage.FileName));
comsave.ExecuteNonQuery()
تابع تبديل كد به عدد:
Private Function ConvertByteToImage(ByVal ImageByte As Byte()) As Image
Dim ms As New MemoryStream(ImageByte)
Dim img As Image
img = Image.FromStream(ms)
Return img
End Function
این تابع کدهای باینری مربوط به عکس ذخیره شده را گرفته و با استفاده از کلاس MemoryStream آنرا به صورت بافر در می آورد و با استفاده از متد FromStream از کلاس Image بافر را به تصویر تبدیل می کنیم.
و حالا خواندن عکس از دیتابیس :
Dim ConnectionString AsString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath & "\image.mdb"
Dim myconnect AsNew OleDb.OleDbConnection(ConnectionString)
myconnect.Open()
Dim comsearch AsNew OleDbCommand()
comsearch.Connection = myconnect
comsearch.CommandText = "Select stname,stimage From student Where stcode=" & Integer.Parse(T1.Text)
Dim reader As OleDbDataReader = comsearch.ExecuteReader()
reader.Read()
T1.Text = reader.GetValue(0).ToString()
PBx.Image = ConvertByteToImage(DirectCast(reader.GetValue(1), Byte()))
myconnect.Close()
pic1 نام کنترل pictureBox برای نمایش تصویر است.
دستورات بالا را در رویداد کلیک یک button بنویسید.
نکته : قبل از نوشتن دستورات بالا فضای نامی System.IO ، System.Data.Sql و System.Data.SqlClient را به پروژه خود اضافه کنید.
Imports System.IO
Imports System.Globalization
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Text
Imports System.Windows.Forms
Imports System.Data.OleDb