PDA

View Full Version : سوال: مشکل کد



majidsoft
چهارشنبه 08 مهر 1388, 12:26 عصر
با سلام من از این کد برای خواندن عکس از دیتابیس استفاده می کنم


Dim Cmd1 As New SqlCommand("Select aks from information where (vahed like @vahed) and (lname like @lname)", Cnn)
Cmd1.Parameters.Clear()
Cmd1.Parameters.AddWithValue("@vahed", "ں«یں ")
Cmd1.Parameters.AddWithValue("lname", Trim(frmmain.txtlname.Text))
Cnn.Open() : Dim dr1 As SqlDataReader : dr1 = Cmd1.ExecuteReader
While dr1.Read
Dim imagebytes As Byte() = DirectCast(dr1.GetValue(0), Byte())
Dim ms As New MemoryStream(imagebytes)
ms.Position = 0 : ms.Seek(0, SeekOrigin.Begin)
picbox1.Image = System.Drawing.Image.FromStream(ms)
picbox1.SizeMode = PictureBoxSizeMode.StretchImage
ms.Flush() : ms.Close()
End While
Cnn.Close()


و از این کد برای ذخیره کردن همان عکس در دیتابیس دیگر



Dim Cmd As New SqlCommand("spinsert_rest", Cnn)
Dim ms, ms1 As New MemoryStream
picbox1.Image.Save(ms, picbox1.Image.RawFormat)
Dim arrimage() As Byte = ms.GetBuffer
Dim param As SqlParameter
Cmd.CommandType = Data.CommandType.StoredProcedure
param = Cmd.Parameters.Add("@code", Data.SqlDbType.BigInt)
param.Value = Val(frmmain.txtcode.Text)
param = Cmd.Parameters.Add("@card", Data.SqlDbType.BigInt)
param.Value = Val(frmmain.txtcard.Text)
param = Cmd.Parameters.Add("@fname", Data.SqlDbType.NVarChar, 50)
param.Value = Trim(frmmain.txtfname.Text)
param = Cmd.Parameters.Add("@lname", Data.SqlDbType.NVarChar, 50)
param.Value = Trim(frmmain.txtlname.Text)
param = Cmd.Parameters.Add("@vahed", Data.SqlDbType.NVarChar, 50)
param.Value = Trim(frmmain.txtvahed.Text)
param = Cmd.Parameters.Add("@onvan", Data.SqlDbType.NVarChar, 50)
param.Value = Trim(frmmain.txtonvan.Text)
param = Cmd.Parameters.Add("@lenth", Data.SqlDbType.Real)
param.Value = Val(txtrest.Text)
param = Cmd.Parameters.Add("@timea", Data.SqlDbType.Text)
param.Value = timeaz
param = Cmd.Parameters.Add("@timet", Data.SqlDbType.Text)
param.Value = timeta
param = Cmd.Parameters.Add("@docp", Data.SqlDbType.NVarChar, 50)
param.Value = "love"
param = Cmd.Parameters.Add("@rest", Data.SqlDbType.Int)
param.Value = "1"
param = Cmd.Parameters.Add("@emza", Data.SqlDbType.Image)
param.Value = arrimage
Cnn.Open()
Cmd.ExecuteNonQuery()
Cnn.Close()
S_clear()
MsgBox("ںلéںمں¢ ¬êں £ ¢ ¬§")


ولی هنگام ذخیره کردن این ایراد رو می گیره
A generic error occurred in GDI+.
در خط سوم از برنامه
picbox1.Image.Save(ms2, picbox1.Image.RawFormat)

لطفا من را راهنمایی کنید
با تشکر

majidsoft
پنج شنبه 09 مهر 1388, 11:33 صبح
آقا یعنی کسی بلد نیست
اگه کدش زیاده من می خوام عکس رو از یک table بخونم و در picbox نمایش دهم و بعد در یک table دیگر ذخیره کنم اگه کد بهتری دارید لطف کنید بگذارید
با تشکر

ali_md110
پنج شنبه 09 مهر 1388, 13:43 عصر
Dim ms As New MemoryStream
Try

PictureBox1.Image.Save(ms, PictureBox1.Image.RawFormat)
Catch exc As Exception
MsgBox("تصوير مناسب را انتخاب کنيد")
Exit Sub
End Try

Dim arrayImage() As Byte = ms.GetBuffer
ms.Close()
' Try
con.Open()
Dim strSQL As String = "INSERT INTO Actors(actid,fname,lname, Pic)VALUES (@actid,@name,@lname, @Pic)"
Dim cmd As New SqlCommand(strSQL, con)
With cmd
.Parameters.Add("@actid", SqlDbType.UniqueIdentifier, 50).Value = Guid.NewGuid
.Parameters.Add("@name", SqlDbType.VarChar, 50).Value = TextBox1.Text
.Parameters.Add("@lname", SqlDbType.VarChar, 50).Value = TextBox1.Text
.Parameters.Add("@Pic", SqlDbType.Image).Value = arrayImage
End With
cmd.ExecuteNonQuery()
con.Close()

anooshiran
پنج شنبه 09 مهر 1388, 14:21 عصر
سلام دوست عزيز

اصولا +GDI فايل رادر اكثرموارد تا زماني كه تصوير را dispose نكرده باشي باز نگه ميدارد.
و اين عمل بدين دليل است كه اعمالي نظير rendering و.... را تا زماني كه آنها واقعا نياز به تسريع بارگذاري دارند ، به تعويق مي اندازد.

شما براي حل اين مشكل چندين راه حل داريد. ولي ساده ترين آن اين است كه:
تصوير را در يك فايل موقت ذخيره كنيد ، بعد تصوير را dispose كرده و سپس فايل موقت را به آدرس فايل اصلي انتقال دهيد.

اميدوارم توضيحاتم واضح بوده باشد.

majidsoft
پنج شنبه 09 مهر 1388, 19:08 عصر
با سلام
دوست عزیز یکم آسونتر توضیح بده یعنی باید عکسی را که از دیتابیس load کردیم به یک فایل دیگر انتقال داده و بعد دوباره وارد برنامه کنیم و save کنیم (دوست عزیز من خیلی متوجه نشدم اگه لطف کنی یک کد که اینکار را انجام می دهد برایم بگذار یا همون کد بالا رو اصلاح کن )
با تشکر

majidsoft
شنبه 11 مهر 1388, 22:33 عصر
با سلام
آقا یکی به داد ما برسه