PDA

View Full Version : آموزش: ذخیره تصویر در بانک (در خود بانک ذخیره می شود)



amir200h
شنبه 15 تیر 1392, 13:51 عصر
خوب تو آموزش قبلی نحوه ذخیره کردن عکس از طریق آدرس رو گفتم در لینک زیر
http://barnamenevis.org/showthread.php?407106-%D8%B0%D8%AE%DB%8C%D8%B1%D9%87-%D8%AA%D8%B5%D9%88%DB%8C%D8%B1-%D8%AF%D8%B1-%D8%A8%D8%A7%D9%86%DA%A9-%28%D8%A2%D8%AF%D8%B1%D8%B3-%D8%B9%DA%A9%D8%B3-%D8%B0%D8%AE%DB%8C%D8%B1%D9%87-%D9%85%DB%8C%D8%B4%D9%87-%D9%88-%D8%A7%D8%B2-%D8%B7%D8%B1%DB%8C%D9%82-%D8%A2%D8%AF%D8%B1%D8%B3-%D8%B9%DA%A9%D8%B3-%D8%B1%D8%A7-%D9%84%D9%88%D8%AF-%D9%85%DB%8C%DA%A9%D9%86%DB%8C%D9%85%29

حالا میریم سراغ ذخیره عکس در بانک.
البته من خودم این روشو واسه پروژه های خیلی بزرگ پیشنهاد نمیدم چون به مرور زمان با حجیم شدن حجم بانک سرعت میاد پایین.
قبل از هرچیز باید بانکمون رو طراحی کنیم. یک بانک به نام savepic ایجاد کنید
و یک جدول به نام test که دارای دو فیلد id و pic باشه
فیلد id را از نوع int تعریف کنید
فیلد piv را از نوع varbinary(MAX)

خوب واسه شروع کار نیاز به دو پیکچر باکس داریم
پیکچر باکس اول برای لود کردن و انتخاب عکس به نام : pictureBox1
و پیکچر باکس دوم برای نمایش عکس از درون دیتابیس به نام : pictureBox2

یه تکست باکس برای گرفتن آی دی عکس به نام : textBox1

سه عدد باتن یکی برای انتخاب عکس یکی برای ذخیره عکس و دیگری برای واکشی عکس از دیتا بیس

خوب برای انتخاب عکس و نشان دادنش در پیکچرباکس از کد زیر استفاده میکنیم

private void btnSelectImage_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog1 = new OpenFileDialog();//yek shey az OpenFileDialog misazim
DialogResult result = openFileDialog1.ShowDialog(); // ba ein code panjereye OpenFileDialog ra namayesh midim vase entekhabe ax
if (result == DialogResult.OK) // khob age to panjereye OpenFileDialog ax ro entekhab konim va ok ro bezanim sharte zir ejra mishe
{
string addressPic = openFileDialog1.FileName;//ein dastor addrese axe entekhab shodaro mirize to moteghayere addressPic
pictureBox1.Image = new Bitmap(addressPic);

}
}



حالا برای ذخیره عکس از کد زیر استفاده میکنیم

private void button1_Click(object sender, EventArgs e)
{
MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, pictureBox1.Image.RawFormat);
byte[] arraypic = ms.GetBuffer();
SqlConnection con = new SqlConnection();
con.ConnectionString = "server=(local);database=savepic;trusted_connection =yes";
SqlCommand com = new SqlCommand();
com.Connection = con;
com.CommandText = "insert into test (id,pic) values (@id,@pic)";
com.Parameters.AddWithValue("@id", textBox1.Text);
com.Parameters.AddWithValue("@pic", arraypic);
con.Open();
com.ExecuteNonQuery();
con.Close();
MessageBox.Show("ok");

}
و برای خواندن عکس از کد زیر استفاده میکنیم

private void button3_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection("server=(local);database=savepic;trusted_connection =yes");
SqlCommand cmd = new SqlCommand();
try
{
con.Open();
cmd.Connection = con;
cmd.CommandText = "select pic from test where id=" + textBox1.Text;
byte[] Img = (byte[])cmd.ExecuteScalar();
string str = Convert.ToString(DateTime.Now.ToFileTime());
FileStream fs = new FileStream(str, FileMode.CreateNew, FileAccess.Write);
fs.Write(Img, 0, Img.Length);
fs.Flush();
fs.Close();
pictureBox2.Image = Image.FromFile(str);
}
catch
{
MessageBox.Show("عکس مورد نظر پیدا نشد. لطفا آی دی وارد شده را با دقت وارد کنید", "بروز خطا");
}
finally
{
con.Close();
}
}

ghasem110deh
پنج شنبه 15 خرداد 1393, 11:58 صبح
سلام
ممنون بابت آموزش ...
اگه بخوام تو اکسس این کارو کنیم چی ؟

pesare
پنج شنبه 15 خرداد 1393, 12:20 عصر
چطوری میشه همزمان چند عکس رو ذخیره کرد؟

forodo
پنج شنبه 15 خرداد 1393, 14:00 عصر
سلام
ریختن هر نوع فایلی داخل بانک اطلاعات و فراخوانی آن در برنامه خودش (http://barnamenevis.org/showthread.php?64210-%D9%86%D9%85%D9%88%D9%86%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%DA%A9%D9%88%DA%86%DA%A9-%D9%88-%D9%85%D9%81%D9%8A%D8%AF-%D8%AF%D8%B1-%D8%B3%D9%8A-%D8%B4%D8%A7%D8%B1%D9%BE&p=1904433&viewfull=1#post1904433)
البته این با اکسس هستش ولی فقط کافیه Oledb و تبدیل به sql کنید و using رو هم عوض کنید.

golestan1
پنج شنبه 15 خرداد 1393, 15:06 عصر
چرا وقتی دکمه ذخیره رو می زنم این ارور رو میده

soonami
پنج شنبه 15 خرداد 1393, 15:55 عصر
قبل از con.open دستور ms.close() بزنید

golestan1
پنج شنبه 15 خرداد 1393, 16:39 عصر
قبل از con.open دستور ms.close() بزنید
جواب نداد....

pesare
پنج شنبه 15 خرداد 1393, 17:29 عصر
سرویس sql شما run نیست

golestan1
پنج شنبه 15 خرداد 1393, 18:05 عصر
سرویس sql شما run نیست
چه جوری run میشه

pesare
پنج شنبه 15 خرداد 1393, 18:09 عصر
داخل Runبنویسید services.msc بعد اینتر کنید , توی صفحه ای که باز میشه سرویس sql رو پیدا کنید و استارت کنید

golestan1
پنج شنبه 15 خرداد 1393, 18:29 عصر
داخل Runبنویسید services.msc بعد اینتر کنید , توی صفحه ای که باز میشه سرویس sql رو پیدا کنید و استارت کنید

تشکر که وقت گذاشتی ولی متاسفانه کار نکرد
من از اس کیو ال اکسپرس خود ویژوال 2010 استفاده می کنم
ابتدا بانک و جدول رو ایجاد می کنم بعد با استفاده از دیتا سورس کانکشن رو می سازم همان طور که در تصویر میبینید در ارور لیست خطایی وجود ندارد و برنامه ران می شود اما نمی دانم چرا عکس سیو نمی شود حتی فایل ضمینه شده هم تو سیستم من اینطوری بود
در صورتی که خودم بانک و جدول ایجاد می کنم چنین مشکلی ندارم

arash_flag
جمعه 16 خرداد 1393, 11:05 صبح
سلام سپاس .
اگر توجه کرده باشید در کنار exe برنامه یک سری فایل بعد ذخیره و نمایش عکس ها ایجاد میشود چه طوری انها رو پاک کنیم؟

AriaRayaneh
جمعه 16 خرداد 1393, 11:11 صبح
سلام امیر جان
میشه چند تا عکس رو با ی آی دی هم ذخیره کرد؟

pesare
جمعه 16 خرداد 1393, 11:36 صبح
اگه تعداد عکسهات مشخصه میتونی به تعداد اونها در یک رکورد فیلد بسازی و با یک ای دی اضافه کنی , اما بهتره برای عکس یه تیبل جدا ایجاد کنی و عکسا رو توی اون ذخیره کنی

esmael_g
یک شنبه 29 اسفند 1395, 19:44 عصر
سلام دوستان یه سوال اساسی که دیگه توش موندم اغا عکس برای من ذخیره نمی شه به کدام توجه کنید

144714

می خوام همراه با اطلاعات مشتری عکسش رو هم بگیرم تو دیتابیس ذخیره کنم ( حجمش کمه برای همین میخوام تو دیتابیس ذخیره بشه ) نه آدرس دهی کنم

هر کاری می کنم نمی شه یه نگاهی بکنید لطفا کجا اشتباه کردم(( راستی سال 1396 هم مبارک سال خوشی براتون آرزو می کنم))

Mahmoud.Afrad
یک شنبه 29 اسفند 1395, 20:06 عصر
سلام دوستان یه سوال اساسی که دیگه توش موندم اغا عکس برای من ذخیره نمی شه به کدام توجه کنید

144714

می خوام همراه با اطلاعات مشتری عکسش رو هم بگیرم تو دیتابیس ذخیره کنم ( حجمش کمه برای همین میخوام تو دیتابیس ذخیره بشه ) نه آدرس دهی کنم

هر کاری می کنم نمی شه یه نگاهی بکنید لطفا کجا اشتباه کردم(( راستی سال 1396 هم مبارک سال خوشی براتون آرزو می کنم))
به جای عکس، کد بزارید.

خطا میده؟ متن خطا؟
همه مقادیر رو به صورت پارامتر ارسال کنید. هم از نظر امنیت و هم از نظر خوانایی کد و جلوگیری از خطاهای احتمالی.

esmael_g
یک شنبه 29 اسفند 1395, 20:51 عصر
خوب اینم کد
MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, pictureBox1.Image.RawFormat);
byte[] arraypic = ms.GetBuffer();
SqlConnection con = new SqlConnection();
con.ConnectionString = "Data Source=.;Initial Catalog=Taxi;Integrated Security=True";
SqlCommand com = new SqlCommand();
com.Connection = con;
com.CommandText = "insert into Driver(Codemili,name,fname,roz,mah,sal,shenasnameh ,car,mayenefani,fuel,fader,img) values('" + textBox4.Text + "','" + textBox2.Text + "','" + textBox3.Text +"','" + comboBox1.Text + "','" + comboBox2.Text + "','" + comboBox3.Text + "','" + textBox1.Text + "','" + textBox5.Text + "','" + textBox6.Text + "','" + comboBox4.Text + "','" + textBox7.Text + "@img" + "')";
com.Parameters.AddWithValue("@img", arraypic);
con.Open();
com.ExecuteNonQuery();
con.Close();
view();


دوم اینم ارور
144718

این که شکل درسته نمی دونم اما هرجور حساب می کنم باید درست باشه و دوم هم تو انجمن و... تنها روش ذخیره عکس ( تنها ) رو نشون دادن من انجام میدم (مثل کد بالا) اما جواب نمی ده همراه با داده های دیگم ذخیره نمی شه و ارور میده

Mahmoud.Afrad
یک شنبه 29 اسفند 1395, 21:03 عصر
قبل از @img ویرگول , نذاشتید. بعدش هم نیازی به تک کوتیشن ندارد.
لینک زیر رو هم ببینید.
http://barnamenevis.org/showthread.php?496537-%D9%85%D8%B4%DA%A9%D9%84-%D8%AF%D8%B1-%D8%B0%D8%AE%DB%8C%D8%B1%D9%87-%D8%B9%DA%A9%D8%B3-%D8%AF%D8%B1-sql-%D8%A8%D8%A7-parameter

esmael_g
یک شنبه 29 اسفند 1395, 21:16 عصر
حالا یه مشکل دیگه ذخیره شد اما دیتاگرید اینجوری نشونش میده مثل شکل پایین چیکار کنم دیتاگرید تصویر فرد رو نشون بده
144719
نگید نگشتم گشتم تو نت و هم تو تنظیمات دیتاگرید حتی بعضی ها هم گفتن باید به صورت اتومات نشون بده؟

esmael_g
جمعه 26 آبان 1396, 11:57 صبح
هی یادش بخیر اون زمان راستش من زیاد بلد نبودم برای ذخیره عکس و باز یابی در کل از روشی که من در بالا داده ذخیره کردم استفاده نکنید درست نیست از روش اسمش چی بود ؟؟/ فک کنم رشته ای بود استفاده کنید همون روشی که امیر جان استفاده کردن و کد های بالا رو برای ذخیره عکس استفاده کردن در کل عالی بود