من برا کار با تصویر از این کدها استفاده کردم و این کدها برا من کار کرد:
/*****اضافه کردن عکس به فرم*********/
عکس رو میتوان از این طریق به یک پیکچر باکس اضافه کرد.
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
fileName = openFileDialog.FileName;
pictureBox1.Image = Image.FromFile(fileName);
}
/********ذخیره کردن عکس از کامپیوتر به دیتابیس اس کیو ال********/
تبدیل ایمیج به باینری
private string fileName = @"C:\Users\Windows\Documents\client.jpg";
Image img;
img = Image.FromFile(fileName);
byte[] bar = ImageToByteArray(img);
که در آن تابع ImageToByteArray
را به صورت زیر تعریف کنید:
public byte[] ImageToByteArray(Image img)
{
using (MemoryStream ms = new MemoryStream())
{
img.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
return ms.ToArray();
}
}
و یادت باشه ذخیره تصویر در دیتابیس اس کیو ال باید در یک ستونی از نوع varbinary(MAX)
باشد.
/********* فراخوان عکس از اس کیو ال به روی فرم ویندوزی********/
تابع loadPicture عکس را در دیتا ستتان پر می کند
که در آن از تابع
byteArrayToImage()
استفاده شده که در زیر تعریف شده است.
private void loadPicture()
{
string conn = global::Motaleh.Properties.Settings.Default.Conn;
SqlDataAdapter dataAdapter = new SqlDataAdapter("SELECT Pic FROM Users WHERE UserID = "+FormMain.UserID, conn);
DataSet dataSet = new DataSet();
dataAdapter.Fill(dataSet);
if (dataSet.Tables[0].Rows.Count == 1)
{
Byte[] data = new Byte[0];
data = (Byte[])(dataSet.Tables[0].Rows[0]["Pic"]);
Image img = byteArrayToImage(data);
yourPictureBox.Image = (Image)img.Clone();
}
}
و تابع byteArrayToImage به صورت زیر تعریف می شود
public System.Drawing.Image byteArrayToImage(byte[] byteArrayIn)
{
System.Drawing.Image returnImage = null;
try
{
MemoryStream ms = new MemoryStream(byteArrayIn);
returnImage = System.Drawing.Image.FromStream(ms); // Here I am getting Parameter is not valid' error.
}
catch (Exception e)
{
//string str = e.Message;
MessageBox.Show(e.Message);
}
return returnImage;
}