PDA

View Full Version : ذخیره تصویر در mysql



jir_jir_jir
پنج شنبه 24 مهر 1393, 10:46 صبح
سلام دوستان عزیر من برای ذخیره تصویر در mysql از کد زیر استفاده می کنم که تصویر با موفقیت ذخیره می شه
نوع فیلد تصویر blob


int Answer = 0;
Query = "";
System.IO.MemoryStream Ms = new System.IO.MemoryStream();
Img.Save(Ms, pictureBox1.Image.RawFormat);
byte[] MyArray = Ms.GetBuffer();
Query = "INSERT INTO tbl_image(Image) VALUES('" + MyArray + "')";
MysqlCon = new MySqlConnection(strProvider);
Mysqlda = new MySqlDataAdapter(Query, MysqlCon);
if (MysqlCon.State == ConnectionState.Closed)
{
MysqlCon.Open();
}
Answer = Mysqlda.SelectCommand.ExecuteNonQuery();
if (MysqlCon != null || MysqlCon.State == ConnectionState.Open)
{
MysqlCon.Close();
}
if (Answer == 1)
{
MessageBox.Show("Ok");
}


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


DataSet Ds = new DataSet();
int Answer = 0;
Query = "";
Query = "SELECT * FROM tbl_image";
MysqlCon = new MySqlConnection(strProvider);
Mysqlda = new MySqlDataAdapter(Query, MysqlCon);
if (MysqlCon.State == ConnectionState.Closed)
{
MysqlCon.Open();
}
Mysqlda.SelectCommand.ExecuteNonQuery();
if (MysqlCon != null || MysqlCon.State == ConnectionState.Open)
{
MysqlCon.Close();
}

Mysqlda.Fill(Ds, "tbl_image");

byte[] MyArray = null;
MyArray = (byte[])Ds.Tables["tbl_image"].Rows[0]["Image"];
System.IO.MemoryStream Ms = new System.IO.MemoryStream(MyArray);
pictureBox2.Image = Image.FromStream(Ms);


که خصای زیر رو می ده
Parameter is not valid.
ممنون می شم کمک کنید

RIG000
پنج شنبه 24 مهر 1393, 11:23 صبح
روی System.IO.MemoryStream Ms = new System.IO.MemoryStream(MyArray); بریک بذارببین کد قیبلش عکس رو گرفته یانه

jir_jir_jir
پنج شنبه 24 مهر 1393, 11:28 صبح
بله دوست عزیز myarray مقدار می گیره

jir_jir_jir
پنج شنبه 24 مهر 1393, 11:31 صبح
از filestream هم استفاده کردم باز همین مشگل بود

RIG000
پنج شنبه 24 مهر 1393, 12:01 عصر
کد داخل ذخیره خودت رو عوض کن و این رو جای
Img.Save(Ms,System.Drawing.Imaging.ImageFormat.Bmp );
یه عکس جدید ذخیره کن مجدد . ببین چی میشه بهم بگو

jir_jir_jir
پنج شنبه 24 مهر 1393, 12:05 عصر
متاسفانه بازم همون error رو داد

RIG000
پنج شنبه 24 مهر 1393, 12:24 عصر
من احساسم اینه که به arry تبدیل نمیشه

oImage.Save(oMemoryStream, System.Drawing.Imaging.ImageFormat.Jpeg);

byte[] Buffer = oMemoryStream.ToArray();
اینکا ر رو بکن و مجدد عکس جدید ثبت کن

RIG000
پنج شنبه 24 مهر 1393, 12:24 عصر
oImage.Save(
Ms, System.Drawing.Imaging.ImageFormat.Jpeg);

byte[]
MyArray = oMemoryStream.ToArray();

اینجوری بنویس یعنی

jir_jir_jir
پنج شنبه 24 مهر 1393, 16:38 عصر
اینو قبلا تست کردم جواب نداد

jir_jir_jir
شنبه 26 مهر 1393, 14:50 عصر
مشگل حل شد به راحتی هر چه تمام تر مثل کره اوکی شد
تشکر از دوستان

RIG000
شنبه 26 مهر 1393, 15:58 عصر
مشگل حل شد به راحتی هر چه تمام تر مثل کره اوکی شد
تشکر از دوستان
مشکلش چی بود؟

jir_jir_jir
شنبه 26 مهر 1393, 16:05 عصر
مشگل مربوط بود به ورژن MySql.Data ورژن جدید نصب کردم کد هم خیلی ساده کردم کار کرد
کد زیر برای تبدیل تصویر به آرایه ای از بایت ها

byte[] b = System.IO.File.ReadAllBytes(openFileDialog1.FileNa me);

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

MySqlConnection Con = new MySqlConnection(myconstring);
string Query = "INSERT INTO tbl_image(Image) VALUES(@MyFile)";
MySqlCommand Com = new MySqlCommand(Query,Con);
Com.Parameters.AddWithValue("@MyFile", b);
Con.Open();
Com.ExecuteNonQuery();
Con.Close();


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

DataSet Ds = new DataSet();
MySqlConnection Con = new MySqlConnection(myconstring);
string Query = "SELECT Image FROM tbl_image";
MySqlDataAdapter Da = new MySqlDataAdapter(Query, Con);
Con.Open();
Da.SelectCommand.ExecuteNonQuery();
Con.Close();
Da.Fill(Ds, "tbl_image");
byte[] b = (byte[])Ds.Tables["tbl_image"].Rows[0]["Image"];
System.IO.MemoryStream ms = new System.IO.MemoryStream(b);
Image img = Image.FromStream(ms);
pictureBox1.Image = img;

mosys2
شنبه 26 مهر 1393, 16:25 عصر
باسلام
اول باید بگی عکس رو براچی میخوای تو پایگاه ذخیره کنی . این کا کار بسیار اشتباهی است
این کار کارایی بانک رو پایین میاره!
راه حل:
شما ابتدا عکس رو آپلود کن تو یه پوشه مثلا "image/img1.jpg" بعد
آدرس این عکس رو توی پایگاه ذخیره کن بعد استفاده کن از اون در تگ <"img src="image/imag1.jpg>

jir_jir_jir
شنبه 26 مهر 1393, 16:32 عصر
دوست عزیز اصلا کاری به این مورد ندارم که کار اشتباهی یا نه
اگر بخوایم ایراد بگیریم به هر مورد می شه ایراد گرفت باید دید که برنامه برای چی پیاده سازی شده که بعد ببینیم کدوم مورد بهتره برای اجرا
بله به دلیل اینکه حجم بانک بالا می ره کارایی رو کم می کنه اما برای برنامه ای که بخواد تعداد تصاویر زیادی رو ذخیره کنه و هر بار بخواد اونارو واکشی کنه
مشگل چیزه دیگه بود که خدارو شکر حل شد