PDA

View Full Version : سوال: مشکل در ثبت مسیر عکس در دیتابیس



Ship Storm
جمعه 13 بهمن 1391, 21:48 عصر
سلام دوستان
من یک مشکل دارم اونم ثبت عکس در دیتابیس هست
میخوام عکسم رو تو دیتابیس ذخیره کنم و کدی که زدم اینه :


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim con As New SqlConnection()
con.ConnectionString = "server=HAMED-PC;database=Hospital;Integrated security=yes"
con.Open()
Dim com As New SqlCommand()
com.Connection = con
Dim sql As String

Dim rnd As New Random
Dim temp As String
temp = rnd.Next(1, 100).ToString()
File.Copy(ImgPath, My.Application.Info.DirectoryPath & "\" & temp & ".JPG")

Dim stream As New FileStream(My.Application.Info.DirectoryPath & "\" & temp & ".JPG", FileMode.Open)

Dim reader As New BinaryReader(stream)
Dim imgByte() As Byte
imgByte = reader.ReadBytes(stream.Length)

Dim s As String
If (RadioButton1.Checked = True) Then
s = 0
ElseIf (RadioButton2.Checked = True) Then
s = 1
End If
If s = 0 Then
s = "Male"
Else
s = "Female"
End If

sql = "INSERT INTO Login(UserName,Password,Sex,picture) VALUES ('{0}','{1}','{2}',@picture)"
sql = String.Format(sql, TextBox1.Text, TextBox2.Text, s)
com.Parameters.Add("@picture", SqlDbType.VarBinary).Value = imgByte

com.CommandText = sql
com.ExecuteNonQuery()
MsgBox("SAVED")
com.CommandText = "select * From Login"
Dim da As New SqlDataAdapter(com)
Dim dt As New DataTable
da.Fill(dt)
DataGridView1.DataSource = dt
con.Close()

Dim Cnn As New SqlClient.SqlConnection
Dim Comm As New SqlClient.SqlCommand
Cnn.ConnectionString = "Server=Hamed-PC;Database=Hospital;Trusted_Connection=True;"
Cnn.Open()
Comm.Connection = Cnn
Comm.CommandType = CommandType.Text
MsgBox(ImgPath)

Dim strSQL As String
strSQL = "INSERT INTO Login(picture) VALUES ('{0}')"
strSQL = String.Format(strSQL, ImgByte)
End Sub



اما وقتی میرم تو دیتابیس میبینم اینطوری ذخیره شده (حروف چینی) :
99401

حالا میخوام به یک Picturebox مسیر عکس رو بدم که نمایش بده ولی نمیشه و چیزی نمایش داده نمیشه
باید چکار کنم ؟ ممنون

systam
یک شنبه 15 بهمن 1391, 13:01 عصر
سلام اینطوری نمیشه برنامه رو ضمیمه کن

asghar2008
یک شنبه 15 بهمن 1391, 13:56 عصر
حالا میخوام به یک Picturebox مسیر عکس رو بدم که نمایش بده ولی نمیشه و چیزی نمایش داده نمیشه
باید چکار کنم ؟ ممنون
[/RIGHT]
[/LEFT]
سلام

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

در این حال شما موقع نمایش عکس باید دوباره بایت رو به Image تبدیل کنید.

فرید نجفلو
یک شنبه 15 بهمن 1391, 13:57 عصر
سلام
اول چک کنید که نوع ستون Picture از نوع ( VarBinary(Max باشه
کدتون رو هم میشه کوتاه تر و بهینه تر کرد:
تو امضای من هم می تونید دو تا نمونه واسه ذخیره فایل تو دیتابیس(مخصوصا فایل های بزرگتر از یه تصویر) پیدا کنید

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
Dim con As New SqlConnection()
con.ConnectionString = "server=HAMED-PC;database=Hospital;Integrated security=yes"
Dim com As New SqlCommand()
com.Connection = con
Dim sql As String

Dim imgByte = IO.File.ReadAllBytes(ImgPath)

Dim s As String = If(RadioButton1.Checked, "Male", "Female")

sql = "INSERT INTO Login(UserName,Password,Sex,picture) VALUES (N'{0}',N'{1}','{2}',@picture)"
sql = String.Format(sql, TextBox1.Text, TextBox2.Text, s)
com.Parameters.AddWithValue("@picture", imgByte)

com.CommandText = sql
con.Open()
com.ExecuteNonQuery()
MsgBox("SAVED")
com.CommandText = "select * From Login"
Dim da As New SqlDataAdapter(com)
Dim dt As New DataTable
da.Fill(dt)
con.Close()
DataGridView1.DataSource = dt


Catch ex As Exception
MsgBox("Error:" & vbNewLine & ex.Message, MsgBoxStyle.Exclamation)
End Try
End Sub