ذخيره عكس در ديتا بيس sql
سلام
من مي خواهم عكس را درون بانك اطلاعاتي به گونه اي ذخيره كنم كه قابليت گزارش گيري توسط كريستال ريپورت را داشته باشد .
خودم اول فيلد عكس در بانك را به صورت image تعريف كرده بودم ولي در زمان ذخيره اطلاعات عكس ذخيره نمي شد .
سرچ كردم ولي چيزي پيدا نمي كنه
از راهنمايي تون ممنون مي شم .
نقل قول: ذخيره عكس در ديتا بيس sql
تو برنامه ها من ديدم كه با مسير ذخيره عكس ، عكس را توي DB ذخيره مي كنند . شما هم همين كار را كن و هنگام واكشي داده ها و نمايش بوسيله كريستال يه object از نوع image ايجاد كن و آدرس عكس را براي نمايش همون مقدار ذخيره شده در DB قرار بده عكس نمايش داده مي شه
نقل قول: ذخيره عكس در ديتا بيس sql
سلام
نقل قول:
خودم اول فيلد عكس در بانك را به صورت image تعريف كرده بودم ولي در زمان ذخيره اطلاعات عكس ذخيره نمي شد
از نمونه کدهای زیر جهت نوشتن و خواندن عکس در بانک اطلاعاتی می تونی استفاده کنی.
در این نمونه کد، قصد آن است که تصویر موجود در picturebox1 در بانک اطلاعاتی sql نگهداری شود.
همچنین فرض شده که جدول مربوطه تنها یک فیلد با نام picture و نوع image داره.
این کد برای ذخیره تصویر استفاده مشه.
Dim ms AsNew MemoryStream()
PictureBox1.Image.Save(ms, PictureBox1.Image.RawFormat)
Dim arrImage() AsByte = ms.GetBuffer
ms.Close()
Dim myConnection AsNew SqlConnection(connectionString)
Dim strSQL AsString = "INSERT INTO Picture ( Picture) VALUES (@Picture)"
Dim cmd AsNew SqlCommand(strSQL, myConnection )
cmd.Parameters.Add(New SqlParameter("@Picture",SqlDbType.Image)).Value = arrImage
myConnection .Open()
cmd.ExecuteNonQuery()
myConnection .Close()
و اما برای نمایش مجدد تصویر در picturebox
Dim arrPicture() AsByte = CType(dsPictures.Tables(0).Rows(?)("Picture"), Byte())
Dim ms AsNew MemoryStream(arrPicture)
With PictureBox2
.Image = Image.FromStream(ms)
.SizeMode = PictureBoxSizeMode.StretchImage
.BorderStyle = BorderStyle.Fixed3D
EndWith
نمونه کد بالا تصویر رو از بانک نمایش می ده.
همچنین در این کد، تصویر مربوطه در رکورد ؟ ذخیره شده.
فکر نمی کنم کدها نیازی به توضیح بیشتری داشته باشن.
نقل قول:
قابليت گزارش گيري توسط كريستال ريپورت را داشته باشد
و امااینکه چطور این رو در کریستال ریپورت نشون داد. تاحالا واسه من همچین کاری پیش نیومده. اما این روشی که دوستمون negar_programmer گفتند، اگه درست باشه می تونید از تلفیق این کدها و روش دوستمون مشکلتون رو حل کنید.
نقل قول: ذخيره عكس در ديتا بيس sql
با تشكر از پاسخ هاي شما
من ترجيحا از آدرس فايل را با كد زير ذخيره كردم
در رويداد دريافت فايل تصوير
IfMe.OpenFileDialogpicture.ShowDialog() = Windows.Forms.DialogResult.OK Then
pictureperson = OpenFileDialogpicture.FileName
PictureBoxaks.Load(pictureperson)
Me.Validate()
Dim rowperson() As DataRow
rowperson = PersoneliDataSet1.moshakhasatpersonel.Select("codepersoneli='" + CodepersoneliTextBoxX.Text + "'")
rowperson(0).Item("aks") = pictureperson.ToString
EndIf
حالا ديگر با يك ذخيره ساده آدرس عكس ذخيره مي شود
براي لود آن
Dim rowperson() As DataRow
If CodepersoneliTextBoxX.Text <> ""Then
rowperson = PersoneliDataSet1.moshakhasatpersonel.Select("codepersoneli='" + CodepersoneliTextBoxX.Text + "'")
pictureperson = rowperson(0).Item("aks").ToString
If pictureperson <> ""Then
PictureBoxaks.Load(pictureperson)
EndIf
نقل قول: ذخيره عكس در ديتا بيس sql
[quote=saeed_rezaei;538588]سلام
از نمونه کدهای زیر جهت نوشتن و خواندن عکس در بانک اطلاعاتی می تونی استفاده کنی.
در این نمونه کد، قصد آن است که تصویر موجود در picturebox1 در بانک اطلاعاتی sql نگهداری شود.
همچنین فرض شده که جدول مربوطه تنها یک فیلد با نام picture و نوع image داره.
این کد برای ذخیره تصویر استفاده مشه.
Dim ms AsNew MemoryStream()
PictureBox1.Image.Save(ms, PictureBox1.Image.RawFormat)
Dim arrImage() AsByte = ms.GetBuffer
ms.Close()
Dim myConnection AsNew SqlConnection(connectionString)
Dim strSQL AsString = "INSERT INTO Picture ( Picture) VALUES (@Picture)"
Dim cmd AsNew SqlCommand(strSQL, myConnection )
cmd.Parameters.Add(New SqlParameter("@Picture",SqlDbType.Image)).Value = arrImage
myConnection .Open()
cmd.ExecuteNonQuery()
myConnection .Close()
و اما برای نمایش مجدد تصویر در picturebox
Dim arrPicture() AsByte = CType(dsPictures.Tables(0).Rows(?)("Picture"), Byte())
Dim ms AsNew MemoryStream(arrPicture)
With PictureBox2
.Image = Image.FromStream(ms)
.SizeMode = PictureBoxSizeMode.StretchImage
.BorderStyle = BorderStyle.Fixed3D
EndWith
نمونه کد بالا تصویر رو از بانک نمایش می ده.
همچنین در این کد، تصویر مربوطه در رکورد ؟ ذخیره شده.
فکر نمی کنم کدها نیازی به توضیح بیشتری داشته باشن.
ببخشید میون کلامتون میام
اما وقتی اینکارو میکنیم بعد از اینکه عکس بازیابی شد و در picBox قرار گرفت چرا نمیشه با دستور savepicture اون تو فایل ذخیره کرد؟؟؟؟؟؟؟؟؟؟
نقل قول: ذخيره عكس در ديتا بيس sql
سلام
نقل قول:
اما وقتی اینکارو میکنیم بعد از اینکه عکس بازیابی شد و در picBox قرار گرفت چرا نمیشه با دستور savepicture اون تو فایل ذخیره کرد؟؟؟؟؟؟؟؟؟؟
وقتی تصویر در بانک ذخیره می شه به صورت بایت نگهداری می شه. در هنگام بازیابی این بایتها در یک memory stream قرار می گیرن و در picturebox لود می شه. چون memory stream یک رشته از اطلاعات در حافظه کامپیوتر هستش، برای ذخیره سازی نمی شه به صورت مستقیم از save استفاده کرد.
برای ذخیره تصویر بایستی روش دیگه ای رو استفاده کرد.
من ترجیح می دم که اون بایتهای از اطلاعات که توی حافظه هست رو مستقیما بیارم توی یه filestream که قابلیت ذخیره سازی روی هارد دیسک رو داشته باشه.
نمونه کد زیر این کار رو انجام می ده.
در این نمونه کد تصویر در مسیر f:\1.jpg ذخیره می شه.
Dim fs2 AsNew IO.FileStream("f:\1.jpg", FileMode.Create, FileAccess.Write, FileShare.None)
fs2.Write(arrPicture, 0, arrPicture.Length)
fs2.Close()
لازم به توضیح هست که این قطعه کد رو باید در ادامه کدهای فراخوانی تصویر قرار داد.
نقل قول: ذخيره عكس در ديتا بيس sql
یه نگاهی به این برنامه بندازید شاید به دردتون خورد
https://barnamenevis.org/attach...4&d=1212407960