ذخیره عکس در پایگاه داده c#

Silverlight

عضو جدید
سلام
یک سوال فوری دارم
چطور میشه یک عکس را در db ,# c قرار داد.

سلام دوست عزیز
یه فیلد از نوع Image در بانکتون تعریف کنید و سپس از متد زیر برای تبدیل عکس به نوع بایت استفاده و در نهایت با یک دستور Insert در جدول مورد نظر درج کنید.

کد:
        public byte[] ReadFile(string sPath)
        {
            byte[] data = null;
            FileInfo fInfo = new FileInfo(sPath);
            long numBytes = fInfo.Length;
            FileStream fStream = new FileStream(sPath, FileMode.Open, FileAccess.Read);
            BinaryReader br = new BinaryReader(fStream);
            data = br.ReadBytes((int)numBytes);
            return data;
        }
نحوه استفاده از این متد :

کد:
 byte[] imageData = ReadFile("آدرس فایل عکس مورد نظر");
 

sayeh1

عضو جدید
اگه کد رو همین جا بزارید که منم استفاده کنم ممنون میشم
مخصوصا کد بازیابی عکس ذخیره شده در دیتابیس و نمایش ان در image control
:gol:
 

sima.eng

عضو جدید
کاربر ممتاز
عکس رو می تونید به دو صورت ذخیره کنید:
ا- یک پوشه واسه عکساتون درست کنید و اونا رو بگذارید اون تو بعد نام فایل رو توی دیتابیس ذخیره کنید. این روش خیلی خوبه چون عکس ها حجم بالایی رو در db اشغال نمی کنن. کنترل image و gridview به راحتی با این آدرس می تونن به عکس مقید بشن و اون رو نشون بدن
2- اما اگه اصرار دارید برید سراغ نوع داده تصویر در db باید همین کاری که گفته شده توسط دوستمون رو انجام بدید و بعد هم داده رو از db بایت به بایت بخونید و به عنوان یک فایل ذخیره کنید. بعد کنترلتون رو به اون نسبت بدید. یا با response.binarywrite توی صفحه بنویسید که با این آخری نمی تونید محتویات html هم به صفحه بدید و صفحه فقط شامل عکس می شه.
واسه نمایش همچین عکسی توی گرید ویو هم دردسر شیرینی دارید که باید با httphandler اون رو بازیابی کنید .
خوب معلومه که اولی خیلی بهتره.
البته اینارو من تو وب می دونم تحت ویندوز هم باید شبیه باشه.
 

saied_genius

عضو جدید
سلام
براي خواندن عکس از ديتابيس

کد:
        public Image selectPesrsonImage(string ID)
        {
            Image newImage = null;
            //
            SqlCommand cmd = new SqlCommand();
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = "select photo from PersonelInfo where ID='" + ID + "'";
            DataL DbRun = new DataL(false);
            if (DbRun.ExecScalarPHOTO(cmd, cmd.CommandText).ToString() != "")
            {
                DbRun = new DataL(false);
                byte[] b = (byte[])DbRun.ExecScalarPHOTO(cmd, cmd.CommandText);
                using (MemoryStream stream = new MemoryStream(b))
                {
                    newImage = Image.FromStream(stream);
                }
            }
            return newImage;
        }

کد:
        public object ExecScalarPHOTO(SqlCommand MyCmd, string commandtext)
        {
            if (checkProgramVersion.checkProgram())
            {
                Object returnValue;
                //
                MyCmd.CommandText = commandtext;
                MyCmd.CommandType = CommandType.Text;
                MyCmd.Connection = Mycn;
                if (Mycn.State == ConnectionState.Closed)
                {
                    Mycn.Open();
                }
                //
                returnValue = MyCmd.ExecuteScalar();
                Mycn.Close();
                Mycn.Dispose();
                return returnValue;
            }
            else
            {
                return null;
            }
        }
 

rasekhinejhad

عضو جدید
آقا این کد شما هم که گذاشتید یک در میون کار می کنه . یه بار نشون می ده دفعه دوم اجرا خطای Parameter is not valid. را می ده چی کار کنم من خیلی لازم دارم
 

vahidhossaini

عضو جدید
سلام
ببخشید من خیلی وقته به اینجا سر نزدم
کد به صورت زیر است:
HTML:
[LEFT]staticvoid Save()
{
string filename = @"C:\Pic.jpg";
byte[] btemp = File.ReadAllBytes(filename);
SqlConnection con = newSqlConnection("server=localhost;uid=sa;pwd=Pass;database= dbname0");
con.Open();
SqlCommand cmd = newSqlCommand("insert into T1 (Pic)values(@PictureCul)", con);
cmd.Parameters.Add("@PictureCul", SqlDbType.Image).Value = btemp;
cmd.ExecuteNonQuery();
}
staticvoid load()
{
string filename = "c:\\a.jpg";
SqlConnection con = newSqlConnection("server=localhost;uid=sa;pwd=Pass;database= dbname0");
con.Open();
SqlCommand cmd = newSqlCommand("select Pic from T1 ", con);
SqlDataReader dr = cmd.ExecuteReader();
byte[] btemp = newbyte[100000];
FileStream fs = newFileStream(filename, FileMode.Create, FileAccess.Write);
if (dr.Read())
{
int count=0;
long size = 0;
while ((count = (int)dr.GetBytes(0, size, btemp, 0, btemp.Length)) > 0)
{
fs.Write(btemp, 0, count);
size += count;
}
}
fs.Close();
}[/LEFT]
موفق باشید
 

MojtabaDinarvand

عضو جدید
با سلام
نوع داده ای image خیلی قدیمیه و دیگه فکر نکنم کسی از اون استفاده بکنه و شما به جای اون میتونید از VarBinary استفاده بکنید.

موفق باشید
 

kerberos2023

عضو جدید
barnameh kamel

barnameh kamel

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.IO;

namespace SavePicInDB
{
public partial class Form1 : Form
{
Bitmap btm;
public Form1()
{
InitializeComponent();
}

private void btnSelectPic_Click(object sender, EventArgs e)
{
openFileDialog1.Title = " Select Picture";
openFileDialog1.Filter = " Jpeg Files (*.jpg)|*.jpg| All Files (*.*)|*.*";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
btm = new Bitmap(openFileDialog1.FileName);
//pictureBox1.Image = Image.FromFile(openFileDialog1.FileName);
pictureBox1.Image = btm;
}
}

private void btnSaveInDB_Click(object sender, EventArgs e)
{
if (pictureBox1.Image != null)
{
try
{
string strConnection = @"Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Class;Data Source=.";
SqlConnection con1 = new SqlConnection(strConnection);
SqlCommand com1 = new SqlCommand();
com1.Connection = con1;
con1.Open();
com1.CommandText = " INSERT INTO Pic (Pic) VALUES (@Pic) ";
com1.Parameters.Add("@Pic", SqlDbType.Image);
byte[] imageData = ReadFile(openFileDialog1.FileName.ToString());
com1.Parameters["@Pic"].Value = imageData;
com1.ExecuteNonQuery();
con1.Close();
MessageBox.Show("Image saved into database", this.Text);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, this.Text);
}
finally
{

}
}
else
{
MessageBox.Show("Please select an image and try again");
}
}

private void btnClear_Click(object sender, EventArgs e)
{
if (pictureBox1.Image != null)
{
pictureBox1.Image.Dispose();
pictureBox1.Image = null;
}
}
public byte[] ReadFile(string sPath)
{
byte[] data = null;
FileInfo fInfo = new FileInfo(sPath);
long numBytes = fInfo.Length;
FileStream fStream = new FileStream(sPath, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fStream);
data = br.ReadBytes((int)numBytes);
return data;
}

private void btnRetrieveFromDB_Click(object sender, EventArgs e)
{
if (txtpicID.Text == null || txtpicID.Text == "")
{
MessageBox.Show("Please enter Picture ID\nIt should be a number");
txtpicID.Focus();
return;
}
string strConnection = @"Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Class;Data Source=.";
SqlConnection con1 = new SqlConnection(strConnection);
SqlCommand com1 = new SqlCommand();
com1.Connection = con1;
con1.Open();
com1.CommandText = "Select Count(*) from pic where ID=@ID";
com1.Parameters.AddWithValue("@ID", txtpicID.Text);
int count = (int)com1.ExecuteScalar();
if (count < 1)
{
MessageBox.Show("There isn't any picture with this ID");
con1.Close();
return;
}
com1.CommandText = " Select Pic from pic Where ID=@ID ";
byte[] image = (byte[])com1.ExecuteScalar();
string strfn=Convert.ToString(DateTime.Now.ToFileTime());
FileStream fs=new FileStream(strfn, FileMode.CreateNew, FileAccess.Write);
fs.Write(image,0,image.Length);
fs.Flush();
fs.Close();
pictureBox1.Image = Image.FromFile(strfn);
con1.Close();
}
}
}
 

Similar threads

بالا