PDA

View Full Version : حرفه ای: فراخوانی عکس از دیتابیس sql در picturebox نه در data tablel



behrooz69
دوشنبه 07 مهر 1393, 02:30 صبح
سلام دوستان و اساتید گرامی.

من تو برنامم یه بخشی دارم به اسم ثبک کاربران . که تو فیلداش عکس کاربر هم هستش که از نوع VarBinary گرفتمش .

ثبت میکنم بدون مشکل.

تا اینجاش درست ؟

ولی موقع فراخوانی یا Select از Sql به مشکل خوردم .

'/// search data & pic from sql db /// Try




If TxtShomareOzviyat.Text.Length > 0 Then


cmd = New SqlCommand()
cmd.Connection = con
cmd.CommandText = "SELECT Name,LastName,FatherName,Jensiyat,TarikhTavalod,Co deMeli,VaziyatTaahol,Tell,Mobile,Shoghl,Tahsilat,T arikhOzviyat,Address,Tozihat,Pic FROM TblOzviyat WHERE(ShomareOzviyat=@ShomareOzviyat)"
cmd.Parameters.Add("@ShomareOzviyat", SqlDbType.NVarChar, 10).Value = TxtShomareOzviyat.Text


con.Open()
Dim sReader As SqlDataReader = cmd.ExecuteReader()


If sReader.Read() Then
TxtName.Text = sReader.GetValue(0).ToString()
TxtLastName.Text = sReader.GetValue(1).ToString()
TxtFatherName.Text = sReader.GetValue(2).ToString()
CboJensiyat.Text = sReader.GetValue(3).ToString()
TxtTarikhTavalod.Text = sReader.GetValue(4).ToString()
TxtCodeMeli.Text = sReader.GetValue(5).ToString()
TxtVaziyatTaahol.Text = sReader.GetValue(6).ToString()
TxtTell.Text = sReader.GetValue(7).ToString()
TxtMobile.Text = sReader.GetValue(8).ToString()
TxtShoghl.Text = sReader.GetValue(9).ToString()
TxtTahsilat.Text = sReader.GetValue(10).ToString()
TxtTarikhOzviyat.Text = sReader.GetValue(11).ToString()
TxtAddress.Text = sReader.GetValue(12).ToString()
TxtTozihat.Text = sReader.GetValue(13).ToString()


If con.State = ConnectionState.Open Then
Dim arrPic() As Byte = CType(ds.Tables("TblOzviyat") _
.Rows(0).Item("Pic"), Byte())
Dim ms As New MemoryStream(arrPic)
Me.PicBoxAx.Image = Image.FromStream(ms)
con.Close()
'con.Dispose()




con.Close()
'AllTxtEnable()


Else : MessageBox.Show("پیدا نشد")
End If
End If
End If
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try

اینم کدم فیلد های متنی رو Select میکنه ولی تو عکس مشکل دارم . ممنون میشم کمکم کنید .


راستی کدش توی Update Sql رو لطف کنید بگید .

با سپاس پیشاپیش .

Mani_rf
دوشنبه 07 مهر 1393, 08:39 صبح
من واقعا متوجه مشکلت نشدم! اگر با خودن عکس از دیتابیس مشکل داری کدی که برای این کار نوشتی 1کم مشکوکه! شما فیلد های متنی را با Reader از دیتابیس خوندی تا اینجاش درست! موقعی که میخوای عکس رو بخونی داری تو یک دیتاست تو تبیل اول و سطر اولش دونبال عکس میگردی! دیتاست از کجا اومد! جایی پر شده من ندیدیم!
در هرصورت برای خوندن عکس هم مثل فیلد های متنی میتونی عمل کنی نیازی به این کار ها نیست




Dim arrPic() As Byte = sReader("Pic")
If arrPic.Lenght > 0 Then
Dim ms As New MemoryStream(arrPic)
Me.PicBoxAx.Image = Image.FromStream(ms)
End If

Hossis
دوشنبه 07 مهر 1393, 09:06 صبح
تو خط 37 باید محتوای فیلد رو به بایت تبدیل کنی
CType(ds.Tables("TblOzviyat") اشتباهه
من خودم با دستور select همه فیلدهارو به دیتاگریدویو احضار می کنم و بعد فیلد تصویر رو به بایت برمی گردونم و مشکلی نداره
Dim pic AS Byte() =r.cells("pic").value

gilsoft
دوشنبه 07 مهر 1393, 11:42 صبح
سلام دوست عزیز

اول از همه ببخشید که دیر جواب دادم

اینم کد مربوطه : ( تست کردم جواب داد .... اگه به مشکل برخوردی .. بگو تا سورس کامل رو بزارم )

Dim p1 As New SqlParameter("@id", SqlDbType.Int) : p1.Value = CInt(txtID.Text)
Using DbCnn As New SqlConnection(strCon.ConnectionString)
Dim SqlCmd As New SqlCommand
With SqlCmd
.CommandType = CommandType.Text
.CommandText = "SELECT Pic FROM Tbl01 WHERE ID=@id"
.Parameters.Add(p1)
.Connection = DbCnn
End With


DbCnn.Open()
Dim imageData As Byte() = DirectCast(SqlCmd.ExecuteScalar(), Byte())
If Not imageData Is Nothing Then
Using ms As New MemoryStream(imageData, 0, imageData.Length)
ms.Write(imageData, 0, imageData.Length)
PB.Image = Image.FromStream(ms, True)
End Using
End If
SqlCmd.Dispose() : DbCnn.Close()
End Using


موفق باشید ....

behrooz69
دوشنبه 07 مهر 1393, 15:42 عصر
از 3 استاد گرامی تشکر میکنم . با کد استاد mani مشکلم حل شد .

تو خط دوم کد این استاد فقط یه اشتباه تایپی بود این Lenght رو به Length تغییر بدید .

یا علی دوستان