PDA

View Full Version : ذخیره و بازیابی ادرس عکس در دیتا بیس



saeeedft
چهارشنبه 30 اردیبهشت 1388, 21:32 عصر
سلام خدمت همه استادان و دوستان گلم،من توی دیتا بیسم می خولم ادرس عکس رو ذخیره کنم و بعد اونو بازیابی کنم و توی دیتا گرید نمایش بدم ،ضمنا نوع داده ای عکسvarbinry هست،از کسانی ک این2 کد رو میدونند خواهش میکنم اون رو برام بزارن(کد ذخیره ادرس عکس در دیتابیس وکد خوندن اون ادرس و نمایش عکس در دیتا گرید)،دوستان فقط دقت داشته باشید من فقط میخوام مسیر عکس رو ذخیره کنم نه خود اون رو و نوع دادهای من هم VARBINARY هست،ضمنا کد مربوط به ویندوز این کار رو میخوام

seven7777777
پنج شنبه 31 اردیبهشت 1388, 01:49 صبح
دوست عزیز سلام

چرا برای ذخیره آدرس عکس فیلد رو از نوع Varbinary گرفتی ، خوب از نوع Varchar یا Nvarchar بگیر . براحتی هم میشه ذخیره و بازیابی آدرس رو انجام داد .
لطفا دقیقا بگو چی می خوای !!!
در مورد ذخیره و خوندن هم مطمئنن دیگه خودت در اون حالت بلدی چه کار کنی .

HamidNazari
پنج شنبه 31 اردیبهشت 1388, 07:16 صبح
برای ذخیره به صورت باینری :


var image = System.Drawing.Image.FromFile(@"C:\my.jpg");
var stream = new System.IO.MemoryStream();
image.Save(stream, image.RawFormat);
var bytes = stream.GetBuffer();
حالا کافیه که مقدار bytes رو وارد دیتابیس کنیم و برای خوندنش هم بر عکس عمل می کنیم :


var bytes = (byte[])dataRow["picture"];
var image = System.Drawing.Image.FromStream(new System.IO.MemoryStream(bytes));


آپدیت : البته برای نشون دادن عکس مثلاً توی picturebox باید از این کد استفاده کرد وگرنه دیتاگرید خودش عکس رو نمایش میده و احتیاجی به این آرتیست بازیا نیست !

h_r_sh
پنج شنبه 31 اردیبهشت 1388, 22:55 عصر
using system.IO;
void AddImage(){
openFileDialog o=new openFileDialog();
o.filter="jpeg | *.jpg";
o.title="Select Image";
if(o.showDialog(this)==DialogResult.Ok){
string s=o.FileName;
string t=Path.GetFileNameWithoutExtension(s);
//using mdb access database format
using(OledbConnection cn=new OledbConnection(myConnectionString)){
oledbCommand cmd=new oledbCommand("insert into tblSample (imageAddress,imageName) values(@a,@b)",cn);
oledbParameter ap=new oledbParameter("@a",s);
oledbParameter bp=new oledbParameter("@b",t);
cmd.Parameters.AddRange(new oledbParameter[] {ap,bp});
if(cn.state==ConnectionState.Closed)
cn.open();
cmd.ExecuteNonQuery();}}}

saeeedft
جمعه 01 خرداد 1388, 00:26 صبح
دوست عزیز سلام

چرا برای ذخیره آدرس عکس فیلد رو از نوع Varbinary گرفتی ، خوب از نوع Varchar یا Nvarchar بگیر . براحتی هم میشه ذخیره و بازیابی آدرس رو انجام داد .
لطفا دقیقا بگو چی می خوای !!!
در مورد ذخیره و خوندن هم مطمئنن دیگه خودت در اون حالت بلدی چه کار کنی .





سلام،دوست عزیز بینید من نمیخوام خود عکس رو ذخیره کنم،می خوام عکس رو توی یه مکانی ذخیره کنم،بعد ادرس عکس رو بریزم تو دیتا بیس،حالا کد ذخیره کردن و بازیابی اون رو میخوام،ضمنا دیتا گرید هم زمانی که نوع داده ای image هست عکس رو نشون میده،اگر نوع داده ای چیز دیگه ای باشه ،برنامه error سیستمی می ده

seven7777777
جمعه 01 خرداد 1388, 03:22 صبح
من با یه جوابم می فهمما !!!:قهقهه:

آقا من میگم اگه می خوای آدرس عکسو نگه داری چرا varbinary نگه میداری ؟
خوب string نگه دار.
هیچ ربطی هم به 'gridview نداره .

saeed2rele
جمعه 01 خرداد 1388, 09:00 صبح
برای ذخیره به صورت باینری :


var image = System.Drawing.Image.FromFile(@"C:\my.jpg");
var stream = new System.IO.MemoryStream();
image.Save(stream, image.RawFormat);
var bytes = stream.GetBuffer();
حالا کافیه که مقدار bytes رو وارد دیتابیس کنیم و برای خوندنش هم بر عکس عمل می کنیم :


var bytes = (byte[])dataRow["picture"];
var image = System.Drawing.Image.FromStream(new System.IO.MemoryStream(bytes));
آپدیت : البته برای نشون دادن عکس مثلاً توی picturebox باید از این کد استفاده کرد وگرنه دیتاگرید خودش عکس رو نمایش میده و احتیاجی به این آرتیست بازیا نیست !
سلام
میتونید از اینکار یه Sample بزارید که این کار رو بکنه؟
با سپاس

danial82
جمعه 01 خرداد 1388, 11:08 صبح
اینم یه Sample که آدرس عکس ذخیره شده تو دیتا بیس رو میخوانه و عکس رو تو گرید نمایش میده
:چشمک:

h_r_sh
جمعه 01 خرداد 1388, 13:06 عصر
سلام،دوست عزیز بینید من نمیخوام خود عکس رو ذخیره کنم،می خوام عکس رو توی یه مکانی ذخیره کنم،بعد ادرس عکس رو بریزم تو دیتا بیس،حالا کد ذخیره کردن و بازیابی اون رو میخوام،ضمنا دیتا گرید هم زمانی که نوع داده ای image هست عکس رو نشون میده،اگر نوع داده ای چیز دیگه ای باشه ،برنامه error سیستمی می ده





void CreateImageFolder(){
if(!DirectoryExists(Application.StartupPath+"\\ImageFolder"))
Directory.CreateDirectory(Application.StartupPAth+"\\ImageFolder);)
}
void CopyImage(){
openFileDialog o=new openFileDialog();
o.Filter="Image File | *.jpg";
o.title="Select Image";
if(o.ShowDialog(this)==dialogResult.ok){
string s=Path.GetFileName(o.FileName);
File.Copy(o.FileName, Application.StartupPath+"\\ImageFolder\\"+s,true);}}

//Add Image to data base by using AddImage() from above post!

saeeedft
جمعه 01 خرداد 1388, 13:15 عصر
من با یه جوابم می فهمما !!!:قهقهه:

آقا من میگم اگه می خوای آدرس عکسو نگه داری چرا varbinary نگه میداری ؟
خوب string نگه دار.
هیچ ربطی هم به 'gridview نداره .
سلام،اقا ممنون از پیگیریت،حالا شما فرض کن varbinary هم نباشه srting باشه،ایا دیتا گرید زمان بازیابی اونو نشون میده؟
در ضمن شما کد ذخیره ادرس عکس در دیتابیس و بازیابی اون رو اگر برام بذارید ممنون میشم،با فرض اینکه نوع دادهای هم همان stringهست:عصبانی++:
من میخوام عکس توی یه دایرکتوری ایجاد شه،بعد عکسا داخل اون ذخیره بشه،بعد ادرس اون در دیتابیس ذخیره بشه وازطریق این ادرس اون عکس رو بازیابی کنیم و نشون بدم(میدونم که نیاز به این همه توضیح نیست،اما من کاری که میخوام دقیقا همین هست)با یک مثال کد این کار رو برام اگه بذارید ممنون میشم

saeeedft
جمعه 01 خرداد 1388, 20:59 عصر
کسی نبود جواب ما رو بده،ما همچنان منتظریم

M.Dalvand
چهارشنبه 06 خرداد 1388, 15:07 عصر
سلام من هم همین مشکل را دارم
ولی من این کار را کردم ، فقط می خوام که به صورت شبکه بشه اون مسیر را خوند .
ولی نمی دونم چطور ؟
کمک می کنید ؟

In_Chan_Nafar
چهارشنبه 06 خرداد 1388, 16:01 عصر
دوست عزيز برين سراغ SQL 2008 و استفاده از FileStream به زودي ماقله اي فارسي در مورد اين نوع DataType جديد و نحوه كار با اون رو Up Load خواهم كرد

In_Chan_Nafar
چهارشنبه 06 خرداد 1388, 16:14 عصر
FileStream دخيره فايل در يك درايو NTFS به صورت Transactional و FileBase‌مي باشد