PDA

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



vB.N3T
یک شنبه 05 آبان 1392, 22:59 عصر
سلام دوستان این قطعه کد که نوشتن عکس رو ذخیره میکنه اما در بازیابی عکس مشکل دارم
ممنون میشم کمک کنید

private void button1_Click(object sender, EventArgs e)
{
SavePicDataSetTableAdapters.tbl_picTableAdapter pic = new SavePicDataSetTableAdapters.tbl_picTableAdapter();

Bitmap b = (Bitmap)pictureBox1.Image;
System.IO.MemoryStream ms = new System.IO.MemoryStream();
b.Save(ms, b.RawFormat);
byte[] picarr = ms.GetBuffer();
ms.Close();
pic.InsertQuery(int.Parse(txtcod.Text), txtname.Text, picarr);
MessageBox.Show("Save PicTure");

}

private void button2_Click(object sender, EventArgs e)
{
OpenFileDialog open = new OpenFileDialog();
open.Filter = ("jpg(*.jpg)|*.jpg|png(*.png)|*.png");
open.ShowDialog();
pictureBox1.Image = Image.FromFile(open.FileName);
}

private void button2_TextChanged(object sender, EventArgs e)
{
SavePicDataSetTableAdapters.tbl_picTableAdapter pic = new SavePicDataSetTableAdapters.tbl_picTableAdapter();
if (txtcod.Text != "")


}
}
}

majid_i68
دوشنبه 06 آبان 1392, 00:37 صبح
برای خواندن عکس از دیابیس یک آرایه از بایتها میسازی ... و فید عکسی رو که از دیتابیس میخونی درونش قرار میدی..
بعد یک شی از کلاس MemoryStream میسازی و آرایه از بایت ها رو که با فید عکس پر کردی .. رو درون MemoryStream میریزی
بعد یه پیکچر باکس قرار میدی و خاصیت ایمیج اون رو به این صورن مقدار دهی میکنی

pictureBox2.Image = Image.FromStream(ObMemory);


اینم قسمتی از پروزه من هست که یک فیلدی که درونش عکسی رو به صورت ارایه از بایتها ذخیره کردم .. رو فراخوانی میکنم و عکس رو نشون میدم


private void button3_Click(object sender, EventArgs e)
{
SqlConnection obSqlconnection = new SqlConnection("Data Source=olive;Initial Catalog=tbl_pic;Integrated Security=True;Pooling=False");
obSqlconnection.Open();
SqlCommand obSqlcommand = new SqlCommand("select pic from tbl_pic5 where id=@p1 ", obSqlconnection);
obSqlcommand.Parameters.AddWithValue("@p1", comboBox1.SelectedItem.ToString());

byte[] myArray=null;
SqlDataReader obSqldataReader = obSqlcommand.ExecuteReader();
if (obSqldataReader.HasRows)
{
while (obSqldataReader.Read())
{
myArray = (byte[])obSqldataReader["pic"];
}
}
obSqldataReader.Close();
obSqlcommand.ExecuteNonQuery();
obSqlconnection.Close();

System.IO.MemoryStream ObMemory = new System.IO.MemoryStream(myArray);

pictureBox2.Image = Image.FromStream(ObMemory);
}

vB.N3T
دوشنبه 06 آبان 1392, 01:32 صبح
خیلی ممنون از کد شما استفاده کردم
میشه این بلاک کد رو توضیح بدید چیکار میکنه

byte[] myArray=null;
SqlDataReader obSqldataReader = obSqlcommand.ExecuteReader();
if (obSqldataReader.HasRows)
{
while (obSqldataReader.Read())
{
myArray = (byte[])obSqldataReader["pic"];
}
}

alireza1384
دوشنبه 06 آبان 1392, 10:23 صبح
شی sqlReader فقط برای خواندن اطلاعات از بانک به ترتیب مورد استفاده قرار می گیرد. سرعت آن به دلیل فقط خواندن بالا است. از اولین رکورد مشخص شده در نتیجه ی دستور جستجوی آن که در sqlCommand آمده است، شروع به خواندن تک تک رکوردها با دستور SqlDataReader.Read() تا آخرین رکورد می کند. اگر رکوردی وجود داشته باشد، وارد حلقه شده و در داخل حلقه مقدار فیلد pic را با دستور SqlDataReader["pic"] خوانده و آنرا به آرایه ایی از بایت تبدیل و در متغیر myArray ذخیره می کند.

majid_i68
دوشنبه 06 آبان 1392, 13:51 عصر
دوست خوبم توضیح کاملی دادن