با سلام به همه ی دوستان عزیز......
کسی میتونه به صورت گام به گام ذخیره عکس در دیتابس به من آموزش بده؟؟؟؟
با سلام به همه ی دوستان عزیز......
کسی میتونه به صورت گام به گام ذخیره عکس در دیتابس به من آموزش بده؟؟؟؟
شما یه فیلد از نوع IMAGE درست کن.
یه پیکچر باکسم قرار بده. می تونی برای تصویر پیکچر باکس از open file dialog استفاده کنی.
حالا تصویر پیکچر باکس رو اینطوری می ریزی تو دیتابیس :
اونت کلیک باتن :
try
{
SqlCommand cmd = new SqlCommand() { Connection = con };
if (con.State == ConnectionState.Closed)
{
con.Open();
}
if (@ImageName != "")
{
FileStream fs = new FileStream(@ImageName, FileMode.Open, FileAccess.Read);
byte[] picbyte = new byte[fs.Length];
fs.Read(picbyte, 0, System.Convert.ToInt32(fs.Length));
fs.Close();
cmd.CommandText = "insert into table(نام فیلد ها)values(نام فیلد ها به اضافه ی @ به اول اونا)";
cmd.Parameters.AddWithValue("@pic", picbyte);
}
else
{
cmd.CommandText = "insert into table(نام فیلد ها)values(نام فیلد ها به اضافه ی @ به اول اونا)";
}
cmd.Parameters.Add("@نام فیلد", SqlDbType.NVarChar).Value = textBox1.Text;
//سایر فیلد ها
if (cmd.ExecuteNonQuery() == 1)
{
MessageBox.Show("اطلاعات با موافقيت ثبت گرديد", "ثبت",MessageBoxButtons.OK,MessageBoxIcon.Aster isk);
}
cmd.Parameters.Clear();
this.نام تیبل ادپتور.Fill(this.نام فایل XSD .نام تیبل);
con.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
یوزینگ :
using System.IO;
این رو هم تعریف کن :
string ImageName = string.Empty;
موفق باشی!
آخرین ویرایش به وسیله ehsan7007 : جمعه 25 مرداد 1392 در 10:31 صبح
اما میگن دیگه نباید از نوع image استفاده کرد و باید از نوع varbainary max استفاده کنند
برای open dialog که کد خواصی که نمی خواد.؟؟؟؟؟ ؟(منظور آدرس عکس)؟
برای ذخیره از bit به جای image استفاده کرد.؟
این برای باتن مسیر تصویر :
try
{
OpenFileDialog Ofd = new OpenFileDialog() { Filter = "Image Files(*.BMP;*.JPG;*.GIF;*.PNG)|*.BMP;*.JPG;*.GIF;* .PNG", Title = "انتخاب تصوير" };
if (Ofd.ShowDialog() == DialogResult.OK)
{
pictureBox1.Image = System.Drawing.Image.FromFile(Ofd.FileName);
ImageName = Ofd.FileName;
}
}
catch (Exception)
{
ImageName = "";
}
در مورد "باید " چیزی نشنیدم . فکر نمی کنم مشکلی داشته باشه .اما میگن دیگه نباید از نوع image استفاده کرد و باید از نوع varbainary max استفاده کنند
آخرین ویرایش به وسیله ehsan7007 : جمعه 25 مرداد 1392 در 10:33 صبح
سلام
بله شما کافیه با open dialog آدرس عکسو بفرستی.
بنده از نوع Image استفاده میکنم و هیچ ایرادی هم نداره.
سلام میشه کده برای نمایش از طریق linq هم یکی بذاره؟
با استفاده از کد های زیر عکس رو ذخیره میکنم اما نمیتونم برای نمایشش مثلا توی یه Picturebox استفده کنم؟
private void button2_Click(object sender, EventArgs e)
{
byte[] imageData = ReadFile(textBox1.Text);
bankEntities db = new bankEntities();
Picture_Save ps = new Picture_Save()
{
name = "image",
image = imageData,
note = "tttttttt"
};
db.Picture_Save.AddObject(ps);
db.SaveChanges();
dataGridView1.DataSource = db.Picture_Save;
}
جاوس جان ممنونم از لطفت خودم یه سورس ADO برای نمایش عکس داشتم اما هر چی دستکاری کردم نتونستم به LINQ بازنویسیش کنم. تشکرذخیره کردن یک تصویر
نمایش تصاویر ذخیره شده در جدول
سلام
اینجوری میشه:
var query1 = (from C in lbank.tb_customers where C.CustomerID == 1 select C.Pic).SingleOrDefault();
MemoryStream ms = new MemoryStream((byte[])(query1));
pictureBox1.Image = Image.FromStream(ms);
lbank یه نمونه ازشی LinqToSql هست. توی این کد، رکوردی از جدول tb_customer که CustomerID اش مساوی یک بود رو انتخاب کردیم و عکس(Pic) رو توی پیکچر باکس نشون دادیم.
برای نشون دادن توی دیتاگرید ویو که مشکل خاصی نیست:
var query = from C in lbank.tb_customers select C;
dataGridView1.DataSource = query;
فقط نکته ای که هست توی فایل dbml باید فیلد عکس رو انتخاب کنی و در قسمت Properties نوع (Type) اش رو رویbyte[]قرار بدی. نوع داده ای توی بانک همVarBinary(MAX)هست.
البته برای اینکه اگه عکسی وجود نداشت خطا نداشته باشیم بهتر کد رو به صورت زیر بنویسید:
var query1 = (from C in lbank.tb_customers where C.CustomerID == 2 select C.Pic).SingleOrDefault();
if (query1 != null)
{
MemoryStream ms = new MemoryStream((byte[])(query1));
pictureBox1.Image = Image.FromStream(ms);
}
else
{
pictureBox1.Image = null;
}
آخرین ویرایش به وسیله Mahmoud Zaad : دوشنبه 20 شهریور 1391 در 13:37 عصر دلیل: البته!
ذخیره عکس در دیتابیس با استفاده از LinqToSql:
اسکریبپ دیتابیس هم هست ولی خودتون به راحتی می تونید یه جدول به اسم tb_customer و سه تا فیلد به اسمهای CustomerID با نوع Int و Customer با نوع varchar(50) و Pic از نوع varbinary(max) بسازید و LinqToSql رو از روی همین بانک بنا کنید!
می شه بگید که اگر یک PictureBox + یک کلید که توسط OpenFileDialog1 عکس رو داخلش می ذاره ، همراه با بفیه فیلد های دیگه چطور بریزیم تو OleDB ?
string query = "INSERT INTO [User Info] (Name,Family,image) VALUES ('" + textBox1.Text + "','" +'" + textBox2.Text + "','" + PictureBox.imageLocation + "');
یا دیگه String query نمی شه استفاده کرد ؟
ممنون
آخرین ویرایش به وسیله SharpSabre : جمعه 24 شهریور 1391 در 02:59 صبح
اینجا یه نمونه هست.
if (openFileDialog.ShowDialog() == DialogResult.OK)این رو از همون نمونه که فرمودید استفاده می کنم ،، اگه عکس رو انتخاب کنم Error می ده و اصلا خودش OpenFileDialog رو باز می کنه
{
byte[] bytes = File.ReadAllBytes(openFileDialog.FileName);
cmd.Parameters.Clear();
cmd.Parameters.Add("@Pic", OleDbType.Binary).Value = bytes;
doCmd("insert into table1 (picture) values(@pic)");
}
اینو نمی شه تغییر بدید که از PictureBox استفاده شه ؟
ممنونم.
اینجوری بنویسید:
if (pictureBox1.Image != null)
{
MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, pictureBox1.Image.RawFormat);
byte[] arrpic = ms.GetBuffer();
ms.Close();
cmd.Parameters.Add("@Pic",arrpic);
}
else
{
cmd.Parameters.Add("@Pic", DBNull.Value);
}
این دستور رو قراردادم همه چی خوب و عالی اجرا می شه ولی ظاهرا عکس تو فایل DB نمی ره ! من بجای Pic متغیر خودم رو گذاشتم .
نباید اینو :
cmd.CommandText = "Insert INTO [User Info] (Avatar) VALUES (@arrpic)";
بعد از پارامتر اضافه کنم ؟
آقای میثم عزیز دوباره تشکر بابت پست مفیدوتون یه سوالی که برام پیش اومده من یه برنامه دارم مینویسم که نیاز به پیوست یک سری اطلاعات نظیر فایل های word هستش آیا از این روش میشه؟؟؟
به نظر شما نحوه خواندن رو به چه شکل ایجاد کنم؟ یعنی بعد از اینکه فایل پیوست شد دریافت فایل به چه شکل میشه؟
آخرین ویرایش به وسیله samadblaj : یک شنبه 28 آبان 1391 در 20:58 عصر دلیل: اشتباه املایی (میسم) دی:
سلام
میثم هستم.
برای ذخیره فایل در دیتابیس:
FileStream fs = new FileStream(FileAddress, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
Byte[] bytes = br.ReadBytes((Int32)fs.Length);
br.Close();
fs.Close();
برای دریافت (دانلود) فایل در مکان دلخواه (با فرض اینکه فایل ها در گرید لود شده باشند) :
SaveFileDialog sfd = new SaveFileDialog();
//sfd.Filter = "Image Files(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF";
sfd.Title = "ذخیره";
sfd.FileName = dataGridView1.CurrentRow.Cells["name"].Value.ToString();
if (sfd.ShowDialog() == DialogResult.OK)
{
byte[] fileData = (byte[])(dataGridView1.CurrentRow.Cells["ole"].Value);
FileStream fs = new FileStream(sfd.FileName, FileMode.Create, FileAccess.ReadWrite);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(fileData);
bw.Close();
MessageBox.Show("Saved");
}
مرسی... عالی بود کاملا جواب داد.
آخرین ویرایش به وسیله samadblaj : جمعه 11 اسفند 1391 در 15:29 عصر
چه ایرادی؟ لطفاً متن یا تصویر خطا رو قرار بدید.