2013-06-17 6 views
1

Пожалуйста, я использую vb.net 2008 и Sql 2008, и мне нужно сохранить изображение в базе данных. Когда я запускаю код изначально, он сохранял, и позже я понял, что это дало мне NullReferenceException. В экземпляре объекта не задана ссылка на объект. Я просто смущен!Ошибка NullReferenceException

Код ниже

Imports System.Data.SqlClient 
Imports System.IO 


Private Sub btnImage1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnImage1.Click 
     'Code to load picture 
     Dim OpenFileDialog1 As New OpenFileDialog 
     OpenFileDialog1.Filter = "JPG|*.jpg|BITMAP|*.bmp|GIF|*.gif" 
     OpenFileDialog1.ShowDialog() 
     If OpenFileDialog1.FileName <> "" AndAlso IO.File.Exists(OpenFileDialog1.FileName) Then 
      Dim Extention As String = New IO.FileInfo(OpenFileDialog1.FileName).Extension 
      Select Case Extention.ToLower 
       Case Is = ".jpg", Is = ".bmp", Is = ".gif" 
       Case Else 
        MsgBox("Only JPG, BMP and GIF files are allowed. Thank you") 
        Exit Sub 
      End Select 
      Me.Pic1.Image = Image.FromFile(OpenFileDialog1.FileName) 
     End If 
    End Sub 


'Code to save picture (I stepped into the code and the frmAllottee.Pic1 is there) 
Public Sub Save_Picture() 
     Dim sql_command As SqlCommand 
     Dim mStream As MemoryStream = New MemoryStream() 
     'Dim mstream As New MemoryStream() 
     frmAllottee.Pic1.BackgroundImage.Save(mstream, frmAllottee.Pic1.BackgroundImage.RawFormat) - This line gives the error 
     Dim arrImage() As Byte = mstream.GetBuffer() 
     mstream.Close() 

     Dim Sql As String = "Insert into Alloc(Pic) VALUES(@Pic)" 
     sql_command = New SqlClient.SqlCommand(Sql, Con) 
     sql_command.Connection.Open() 
     sql_command.Parameters.AddWithValue("@Pic1", arrImage) 
     sql_command.ExecuteNonQuery() 
     sql_command.Connection.Close() 
    End Sub 
+2

Использовал ли вы отладчик, чтобы узнать, что такое null? – SLaks

+0

Кстати, вы должны называть 'ToArray()', а не 'GetBuffer()'. – SLaks

+1

На какой линии ?. – Neolisk

ответ

1

Это может случиться, если frmAllottee.Pic1.BackgroundImage равно нулю.

Image и BackgroundImage не то же самое.

+0

Я пробовал Image.Save, но он дал мне ту же ошибку. – Benniit

+0

Используйте отладчик, чтобы узнать, что такое null. – SLaks

0
Me.Pic1.Image = Image.FromFile(OpenFileDialog1.FileName) 

Эта строка кода здесь оленья кожа соответствует этому коду:

frmAllottee.Pic1.BackgroundImage.Save(mstream, frmAllottee.Pic1.BackgroundImage.RawFormat) 

Вы вставили изображение в вашем Pic1 в изображения в то время как вы спасаете его, и вы выбрали BackgroundImage вместо изображения

Также

Dim Sql As String = "Insert into Alloc(Pic) VALUES(@Pic)" 
    sql_command = New SqlClient.SqlCommand(Sql, Con) 
    sql_command.Connection.Open() 
    sql_command.Parameters.AddWithValue("@Pic1", arrImage) 
    sql_command.ExecuteNonQuery() 
    sql_command.Connection.Close() 

@Pic от вставки в базу данных должны быть то же, что и ваш @ Pic1 при добавлении значения i.e (оба должны быть @Pic или в зависимости от того, что вам нравится) Ive пробовал, и он работает

Смежные вопросы