0

我想將圖像上傳到數據庫,我在互聯網上發現了很多代碼,但其中沒有一個適合我。我正在用格式瀏覽(png,gif,jpeg和bmp)瀏覽圖像,之後我想用Save按鈕將這些類型的圖像上傳到數據庫。
爲了檢索它們,我使用另一個按鈕加載。你可以請指導我如何做到這一點。
這是我的編碼告訴我我在哪裏錯了。通過vb 2010將任何格式的圖像上傳/檢索到SQL Server數據

Imports System.Data.SqlClient 
Imports System.IO 
Imports System.Drawing.Image 

Public Class Employee 

Dim myImage As Image 
Dim imgMemoryStream As IO.MemoryStream = New IO.MemoryStream() 
Dim imgByteArray As Byte() = Nothing 
Dim con As SqlConnection = New SqlConnection("Data Source=CILENTEYEZ-PC\CILENTEYEZ;Initial Catalog=Keeper;Integrated Security=True") 
Dim cmd As SqlCommand 
Dim myDA As SqlDataAdapter 
Dim myDataSet As DataSet 
Dim dr As SqlDataReader 

' From Here This is the Code for Insertion. 

Private Sub BrowsePic_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BrowsePic.Click 

    Dim fd As OpenFileDialog = New OpenFileDialog() 

    fd.Title = "Select your Image." 
    fd.InitialDirectory = "C:\" 
    fd.Filter = "All Files|*.*|Bitmaps|*.bmp|GIFs|*.gif|JPEGs|*.jpg|PNGs|*.png" 
    fd.RestoreDirectory = False 

    If fd.ShowDialog() = DialogResult.OK Then 
     PictureBox.ImageLocation = fd.FileName 
    ElseIf fd.FileName.Contains("jpeg") Or fd.FileName.Contains("jpg") Then 

     myImage.Save(imgMemoryStream, System.Drawing.Imaging.ImageFormat.Jpeg) 
     imgByteArray = imgMemoryStream.GetBuffer() 

    ElseIf fd.FileName.Contains("png") Then 

     myImage.Save(imgMemoryStream, System.Drawing.Imaging.ImageFormat.Png) 
     imgByteArray = imgMemoryStream.GetBuffer() 

    ElseIf fd.FileName.Contains("gif") Then 

     myImage.Save(imgMemoryStream, System.Drawing.Imaging.ImageFormat.Gif) 
     imgByteArray = imgMemoryStream.GetBuffer() 

    ElseIf fd.FileName.Contains("bmp") Then 

     myImage.Save(imgMemoryStream, System.Drawing.Imaging.ImageFormat.Bmp) 
     imgByteArray = imgMemoryStream.GetBuffer() 

    End If 

End Sub 

Private Sub Save_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Save.Click 

cmd = New SqlCommand("Insert Into Employee Values('" & SR_CodeTextBox.Text.Trim() & "','" & NameTextBox.Text.Trim() & "','" & CNICTextBox.Text.Trim() & "','" & Date_of_BirthDateTimePicker.Text & "','" & AgeTextBox.Text.Trim() & "','" & AddressTextBox.Text.Trim() & "',@ imgByteArray ,'" & Mobile_NumberTextBox.Text.Trim() & "')", con) 
     If con.State = ConnectionState.Closed Then con.Open() 
     cmd.ExecuteNonQuery() 
     con.Close() 
     MessageBox.Show("New Employee Record is Added.", "Message", MessageBoxButtons.OK) 

End Sub 

' From Here This is the Code for Eiditing. 

Private Sub Go_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Go.Click 

    cmd = New SqlCommand("Select * from Employee where SR_Code = '" & SearchBox.Text.Trim() & "'", con) 

    If SearchBox.Text = "" Then 
     MsgBox("Please enter SR Code first.") 

    Else 

     Try 

      If con.State = ConnectionState.Closed Then con.Open() 
      dr = cmd.ExecuteReader() 

      If dr.HasRows = True Then 

       dr.Read() 

       Edit_SR_CodeTextBox.Text = dr.Item("SR_Code") 
       Edit_NameTextBox.Text = dr.Item("Name") 
       Edit_CNICTextBox.Text = dr.Item("CNIC") 
       Edit_Date_of_BirthDateTimePicker.Text = dr.Item("Date_of_Birth") 
       Edit_AgeTextBox.Text = dr.Item("Age") 
       Edit_AddressTextBox.Text = dr.Item("Address") 
       imgByteArray = dr.Item("Picture") 
       Edit_Mobile_NumberTextBox.Text = dr.Item("Mobile_Number") 

       imgMemoryStream = New IO.MemoryStream(imgByteArray) 
       myImage = Drawing.Image.FromStream(imgMemoryStream) 
       PictureBox.Image = myImage 

       MsgBox("Record Retrieved.") 
       con.Close() 

      ElseIf dr.Read = False Then 
       MsgBox("Please enter a valid SR Code to load data.") 
       con.Close() 
      End If 

     Catch ex As Exception 
      MessageBox.Show(ex, "Message") 

     End Try 

    End If 

End Sub 

回答

0

對於圖片瀏覽,您可以使用此代碼。

Private Sub BrowsePic_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BrowsePic.Click 

    Dim ImageDialogue As OpenFileDialog = New OpenFileDialog() 

    ImageDialogue.Title = "Select your Image." 
    ImageDialogue.InitialDirectory = "C:\" 
    ImageDialogue.Filter = "Image Files|*.gif;*.jpg;*.png;*.bmp;" 
    ImageDialogue.RestoreDirectory = False 

    If ImageDialogue.ShowDialog() = DialogResult.OK Then 
     PictureBox.Image = Image.FromFile(ImageDialogue.FileName) 
    End If 

End Sub 

圖像上傳(到數據庫),你可以在VB中使用此代碼2010

cmd = New SqlCommand("Insert Into Proposer Values(& @Picture)", con) 
If con.State = ConnectionState.Closed Then con.Open() 

      Dim ms As New MemoryStream() 
      PictureBox.Image.Save(ms, PictureBox.Image.RawFormat) 
      Dim data As Byte() = ms.GetBuffer() 
      Dim p As New SqlParameter("@Picture", SqlDbType.Image) 
      p.Value = data 
      cmd.Parameters.Add(p) 
      cmd.ExecuteNonQuery() 

      con.Close() 

圖像檢索(從數據庫)我在VB中使用這個代碼2010

Dim data As Byte() = DirectCast(dr("Picture"), Byte()) 
Dim ms As New MemoryStream(data) 
Edt_PictureBox.Image = Image.FromStream(ms) 

注意:在VB-2010中未使用VB-2008。正如你看到的代碼與C#有點不同,所以不要指望它能在C#上工作。
我可以做出改變(平均轉換爲C#),然後它會工作。

相關問題