...بارگذاری

سلام عزیزان

این پست نحوه ذخیره تصویر و بازیابی اون بدون دیتاگرید ویو رو براتون آموزش میدم

ببنید این برنامه میتونه بانک اطلاعاتی تصاویر باشه

البته در صورتیکه تصاویر داراری امنیت و محرمانه بوده 2 راه اینجا میشه مطرح کرد اول اینکه دیتابیس مورد نظر رو رمزگذاری کنیم که و این پروژه همین کار رو انجام دادم

و دومین کار اینه که میتونیم داده هایی که تودیتابیس ذخیره میشن رو به حالت رمزنگاری تبدیل کرده و سپس ذخیره کرد 

اما همین روش اول نیز امنیت تصاویر را تا حدودی تامین میکنه

برای شروع با اکسس یه دیتابیس بسازید و اسمش رو مثلا Dbpic بزاریم و یه جدول با نام tblpic  تعیین کنید و 3 فیلد بهش اضافه کنید فیلد اول بنام آی دی و فیلد دوم فیلد ذخیره تصویر با نوع object و فیلد سوم که از این فیلد برای شناسایی تصاویر استفاده میکنیم فیلد اسم تصاویر هست..


خب وقتی دیتابیس ساخته شد داخل فرم تو سی شارپ یه picbox بزارید و برای جلوگیری از حرکت اون رو قفل کنید و حالت عکس رو روی استرچ بزارید

خب 4 تا باتن میزاریم یکی برای اتخاب تصویر -دومی برای ذخیره تصویر توی دیتابیس و 2تا برای نمایش عکس یکی با نام و دیگری با شماره ردیف

کد زیر برای انتخاب تصویر هست

OpenFileDialog op = new OpenFileDialog();
if (op.ShowDialog() == DialogResult.OK)
textBox1.Text = op.SafeFileName;
{
}
pictureBox1.ImageLocation = op.FileName;


برای ذخیره تصویر هم میبایست یه متد تبیل تصویر به بایت مینویسیم

public static byte[] ImageToByte(Image img)
{
ImageConverter converter = new ImageConverter();
return (byte[])converter.ConvertTo(img, typeof(byte[]));
}

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


private void Btnsavepic_Click(object sender, EventArgs e)
{
OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\\dbpic.accdb");
filename = Path.GetFileName(textBox1.Text);
string query = "Insert Into tblpic (savepic,picname) Values (@save,@name)";
OleDbCommand com = new OleDbCommand(query, con); com.Parameters.AddWithValue("@save", ImageToByte(pictureBox1.Image));
MessageBox.Show("Save Success!");
com.Parameters.AddWithValue("@name",filename); con.Open(); com.ExecuteNonQuery(); con.Close();
}



و برای نمایش تصویر از این کد استفاده میکنیم تفاوت نمایش تصویر بوسیله آی دی و یا نام تصویر در انتخاب نام فیلد جدول هست


OleDbConnection co
nn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\\dbpic.accdb");
OleDbCommand SQLCommand = new OleDbCommand(); conn.Open();
string query2 = "select * from tblpic WHERE picname= '" + getpwd + "'";
string getpwd = textBox1.Text.ToString(); Console.Write(query2);
if (textBox1.Text == "")
OleDbCommand s = new OleDbCommand(query2, conn); OleDbDataReader bReader = s.ExecuteReader(); {
}
MessageBox.Show("Please Enter the Image name to retrive!!");




خیلی پیچیده نیست و دیدم برای چنین برنامه ای 4 برابر این کدنویسی شده که برای بهینه سازی و تجاری کردن برنامه مانند استفاده از بک گراند ورکر و استفاده از async لازم هست

در انتها سورس رو برای استفاده میذارم دانلــــــــــــــود



همه کد ها 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data; using System.Linq;
using System.Windows.Forms;
using System.Data.OleDb; using System.Text; using System.IO;
{
namespace pic_save { public partial class Form1 : Form
string filename = null;
public Form1() { InitializeComponent(); }
private void Btnsavepic_Click(object sender, EventArgs e)
OleDbConnection con; OleDbCommand cmd; {
OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\\dbpic.accdb;Jet OLEDB:DATABASE password=test++");
filename = Path.GetFileName(textBox1.Text);
OleDbCommand com = new OleDbCommand(query, con);
string query = "Insert Into tblpic (savepic,picname) Values (@save,@name)";
con.Open();
com.Parameters.AddWithValue("@save", ImageToByte(pictureBox1.Image)); com.Parameters.AddWithValue("@name",filename);
{
com.ExecuteNonQuery(); con.Close(); MessageBox.Show("Save Success!"); } public static byte[] ImageToByte(Image img)
private void Btnselect_Click(object sender, EventArgs e)
ImageConverter converter = new ImageConverter(); return (byte[])converter.ConvertTo(img, typeof(byte[])); } { OpenFileDialog op = new OpenFileDialog();
private void Btngetpic_Click(object sender, EventArgs e)
if (op.ShowDialog() == DialogResult.OK) { textBox1.Text = op.SafeFileName; pictureBox1.ImageLocation = op.FileName; } } {
string getpwd = textBox1.Text.ToString();
OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\\dbpic.accdb;Jet OLEDB:DATABASE password=test++"); OleDbCommand SQLCommand = new OleDbCommand(); conn.Open(); string query2 = "select * from tblpic WHERE picname= '" + getpwd + "'"; Console.Write(query2);
b = (Byte[])(bReader["savepic"]);
OleDbCommand s = new OleDbCommand(query2, conn); OleDbDataReader bReader = s.ExecuteReader(); if (textBox1.Text == "") { MessageBox.Show("Please Enter the Image name to retrive!!"); } else if (bReader.Read()) { byte[] b = new byte[0]; MemoryStream ms = new MemoryStream(b);
con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\\dbpic.accdb;Jet OLEDB:DATABASE password=test++");
pictureBox1.Image = Image.FromStream(ms); //pictureBox1.Image = Convert.ToSByte(dr["Url"].ToString()); } else { MessageBox.Show("Please Enter Valid Image name!!!"); } conn.Close(); } private void Button1_Click(object sender, EventArgs e) { con.Open();
private void PictureBox2_Click(object sender, EventArgs e)
cmd = new OleDbCommand("Select * From tblpic where ID=" + textBox1.Text, con); OleDbDataAdapter da = new OleDbDataAdapter(cmd); DataSet ds = new DataSet(); da.Fill(ds); if (ds.Tables[0].Rows.Count > 0) { MemoryStream ms = new MemoryStream((byte[])ds.Tables[0].Rows[0]["savepic"]); pictureBox1.Image = new Bitmap(ms); } } { this.Close();
}
}
}


تعداد نظرات 0

ارسال نظر

لطفا از ارسال نظرات حاوی تبلیغات و توهین خودداری فرمائید

ایمیل های شما در هر صورت محفوظ هست مگر در متن کامنت درج شود

Dear users, please refrain from posting comments about ads and sales links, and such
otherwise comments will be deleted Also your emails will be hidden