ورود

View Full Version : مشکل در بازیابی و ذخیره عکس در دیتابیسی که فیلد Image اون به صورت پیش فرض Null هست



msh_gold
شنبه 02 آذر 1387, 10:47 صبح
سلام دوستان .
مشکل من این هست که زمانی که ما یک Table داریم که یک فیلدش از نوع Image باشه زمانی که ما در یک PictureBox عکسی هست که مشکلی در Insert اطلاعات وجود نداره اما زمانی که در PictureBox عکسی وجود نداره مقدار Null به دیتابیس فرستاده می شه تا اینجا که کسی مشکلی نداره من هم مشکلی ندارم اما در زمان لود اطلاعات از دیتابیس من می خواهم این اطلاعات رو در یک DataGridView نمایش بدیم و یا در یک PictureBox خوب در این زمان برنامه Error می ده ومضمون Error هم این هست : فیلد Image خالی از اطلاعات می باشد .
حال سوال من این هست که چه کاری باید در زمان Insert انجام داد که اگر PictureBox خالی بود یک مقدار مشخص به دیتابیس فرستاده بشه که در زمان لود اطلاعات مشکلی پیش نیاد.
البته دوستان System.DBNULL رو پیشنهاد داده بودند که استفاده کردم و باز هم به مشکل برخورد کردم .
اگر امکان داره و کسی نمونه برنامه ای داره خواهش می کنم در این تاپیک قرار بدین .
یا راهنمایی کنید که چطور میشه گفت که اگر داخل pictureboxعکسی وجود داره یه عملی را انجام بده و در غیر این صورت اون کار رو انجام نده .با تشکر

s.k711
شنبه 02 آذر 1387, 10:59 صبح
سلام دوست عزيز من هم جند روز قبل چنين مشكلي داشتم. كدم را براتون مينويسم اميدوارم مشكلت برطرف بشه.





Private Sub DataGridView1_CellContentClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
If e.RowIndex >= 0 Then

Try

Dim str As String

con.Open()
str = "select * from [order] where oid= '" & DataGridView1.Rows(e.RowIndex).Cells(0).Value.ToSt ring & "'"

Dim cmd As New SqlCommand(str, con)
Dim dr As SqlDataReader
dr = cmd.ExecuteReader()
If dr.HasRows = True Then

dr.Read()
id = dr("oid")
dr.Close()
load_pic(id)
con.Close()
Else

dr.Close()
con.Close()
Msgbox_Custom("اطلاعاتي در مورد اين سفارش وجود ندارد.", 1, 1, "اخطار")
End If

Catch ex As Exception
End Try

End If

End Sub

Sub load_pic(ByVal id As Integer)
Dim str As String

Try

str = "Select [o_model] From [order] where ([oid]='" & id & "')"

da = New SqlDataAdapter(str, con)
dt = New DataTable
da.Fill(dt)
If (dt.Rows.Count > 0) And (dt.Rows(0).Item(0) Is DBNull.Value) Then

'If (dt.Rows(0).Item(0) Is DBNull.Value) Then

Me.PictureBox1.Image = Me.PictureBox2.Image
Msgbox_Custom("در سفارش مورد نظر تصويري براي نمايش وجود ندارد.", 1, 2, "نمايش عكس")
Exit Sub

Else

Dim arrpic() As Byte = CType(dt.Rows(0).Item(0), Byte())
Dim ms As New IO.MemoryStream(arrpic)
If Not (ms Is Nothing) Then

PictureBox1.Image = Image.FromStream(ms)
End If

' End If

End If

Catch ex As Exception
End Try

End Sub







'in load part of my codes, i wrote this code'
'i added a picturebox 2with visible=false before

Me.PictureBox2.Image = Me.PictureBox1.Image





اگه مشكل داشتي حتما بپرس.