PDA

View Full Version : سوال: خیلی سرچ کردم ولی هنوز موفق نشدم یک تصویر توی پایگاه دادم ذخیره کنم. لطفا کمک کنید



yahya_115
پنج شنبه 26 خرداد 1390, 15:16 عصر
با کلیک روی یه دکمه کد زیر

private void button3_Click(object sender, EventArgs e)
{
OpenFileDialog op_file = new OpenFileDialog();
op_file.Filter = "Image Files(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|All files (*.*)|*.*";
if (op_file.ShowDialog() == DialogResult.OK && op_file.FileName != "")
{
try
{
bmp = new Bitmap(op_file.FileName);

pictureBox1.Image = bmp;

}
catch (Exception)
{
MessageBox.Show("فايل وارد شده فايل تصويري نميباشد");
return;
}

} }

بعد با زدن ثبت کد زیر


Bitmap bitmap = new Bitmap(pictureBox1.Image);

MemoryStream memoryStream = new MemoryStream();
bitmap.Save(memoryStream, ImageFormat.Jpeg);
byte[] buffer = memoryStream.GetBuffer();
memoryStream.Close();
memoryStream.Dispose();
f.Pic = buffer;
f.add();
this.Close();

اینم کلاسم که تابع add رو توش نوشتم


class fard
{
mydataAccess md = new mydataAccess();
public int id;
public string parvande;
public string name;
public string famil;
public string address;
public string tell;
public string pedar;
public string melli;
public string noe;
public byte[] Pic;

public enum searchtype
{
shomare,melli,family
}

public void add()
{

md.connect();
string s = "insert into fard (fard_name,fard_famil,fard_pedar,fard_melli,fard_a ddress,fard_tell,fard_noe,fard_pic,fard_parvande)v alues (N'{0}',N'{1}',N'{2}',N'{3}',N'{4}','{5}',N'{6}',' {7}',N'{8}')";
s = string.Format(s, this.name, this.famil, this.pedar, this.melli,this.address,this.tell,this.noe,this.pi c,this.parvande);
md.docommand(s);
md.disconnect();


ولی نمی فهمم چرا درست کار نمیکنه:عصبانی::عصبانی::عصبا ی:

morteza271
پنج شنبه 26 خرداد 1390, 15:38 عصر
حداقل بگین کجاش مشکل داره اینجوری که خیلی سخته کمک کرد!
ولی این یه نمونه برنامه که براتون میذارم برای ذخیره عکس در دیتابیس هست خیلی خوبه،ازش کمک بگیرید.در ضمن من این برنامه رو از روی همین سایت پیدا کردم:
71243

yahya_115
جمعه 27 خرداد 1390, 03:13 صبح
مرسی . منم از این جور برنامه ها زیاد گرفتم ولی نمیدونم چرا برای من نمیشه. البته من 2010 نصب کردم. نمی دونم شاید از این باشه. وقتی فیلدمو varbinary میگیرم که 71263

وقتی هم که image میگیرم، یه چیزی ذخیره میشه که بعد لود نمیشه، در واقع انگار اصلا ذخیره نمیشه، فقط ارور نمیده

mmd2009
جمعه 27 خرداد 1390, 04:09 صبح
با سلام

یک برنامه ساده نوشتم امیدوارم کارتو راه بندازه.

کدهای برنامه :


string db = @"Data Source=.\sqlexpress;Initial Catalog=DbLearn;Integrated Security=True";
SqlConnection con;
SqlCommand cmd;


public Image ConvertByteArrayToImage(byte[] ImageByte)
{
try
{
using (MemoryStream ms = new MemoryStream(ImageByte))
{
return (Image.FromStream(ms, true));
}
}
catch (Exception) { throw; }
}

private byte[] ConvertImageToByteArray(Image imageToConvert)
{
byte[] Ret;
try
{
using (MemoryStream ms = new MemoryStream())
{
imageToConvert.Save(ms, ImageFormat.Jpeg);
Ret = ms.ToArray();
return (Ret);
}
}
catch (Exception) { throw; }
}

private void btnSave_Click(object sender, EventArgs e)
{
try
{
using (OpenFileDialog ofd = new OpenFileDialog())
{
ofd.Filter = "Image Files(*.jpg; *.jpeg; *.gif; *.bmp)|*.jpg; *.jpeg; *.gif; *.bmp";
if (ofd.ShowDialog() == DialogResult.OK)
{
this.con = new SqlConnection(db);
string Query = "insert into tblUser(pic)values(@pic)";
this.cmd = new SqlCommand(Query, con);
this.cmd.Parameters.Add("@pic", SqlDbType.VarBinary).Value =
this.ConvertImageToByteArray(Image.FromFile(ofd.Fi leName));

this.con.Open();
this.cmd.ExecuteNonQuery();
this.con.Close();
}
}
}
catch (Exception) { throw; }
}

private void btnLoad_Click(object sender, EventArgs e)
{
try
{
this.con = new SqlConnection(db);
string Query = "select pic from tblUser where id=@id";
this.cmd = new SqlCommand(Query, con);
this.cmd.Parameters.Add("@id", SqlDbType.Int).Value =
int.Parse(txtId.Text);

con.Open();

SqlDataReader re = this.cmd.ExecuteReader();

while (re.Read())
{
picUser.Image = ConvertByteArrayToImage((byte[])re[0]);
}
con.Close();
}
catch (Exception) { throw; }
}


اسکریپت بانک :


USE [DbLearn]
GO
/****** Object: Table [dbo].[tblUser] Script Date: 06/17/2011 04:29:16 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[tblUser](
[id] [int] IDENTITY(1,1) NOT NULL,
[Pic] [varbinary](max) NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO

mobtakercode
جمعه 27 خرداد 1390, 08:55 صبح
http://www.mobtakercode.com/2008.php

yahya_115
سه شنبه 31 خرداد 1390, 01:38 صبح
خودم می دونم که با این جور کد نوشتن جواب میده ولی میخوام بدونم مشکل کد خودم چیه. به هر حال مرسی

far2020
سه شنبه 31 خرداد 1390, 03:05 صبح
تو این خط
string s = "insert into fard (fard_name,fard_famil,fard_pedar,fard_melli,fard_a ddress,fard_tell,fard_noe,fard_pic,fard_parvande)v alues (N'{0}',N'{1}',N'{2}',N'{3}',N'{4}','{5}',N'{6}',' {7}',N'{8}')";
s = string.Format(s, this.name, this.famil, this.pedar, this.melli,this.address,this.tell,this.noe,this.pi c,this.parvande);

بجای '{7}'، {7} بذار.ببین درس میشه.

gwbasic
سه شنبه 31 خرداد 1390, 09:17 صبح
ببین دوست عزیز مشکل تو نوشتن دستور Command هستش که برای ست کردن مقادیر از string.Format استفاده کردی که این برای Picture مشکل ایجاد می کنه و Byte[] رو نمی تونه به string تبدیل کنه بنابراین از SqlCommand استفاده کن و برای هر فیلدت Parameter تعریف کن و مقدار رو از اون طریق ست کن تا مشکلت حل شه