2014-12-08 145 views
0

每次我在數據庫上搜索時,它總是說「對象引用未設置爲對象的實例」。 請大家幫幫我。謝謝。未將對象引用設置爲對象的實例VB.Net OleDbCommand

這裏是我的代碼搜索:

Private Sub BtnSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnSearch.Click

If TBSearch.Text = "" Then 
     MsgBox("Please enter keyword to search...", MsgBoxStyle.Information, "Keyword to search...")` 
     TBSearch.Focus() 
     Exit Sub 
    End If 
    Call OpenConnection() 
    With OleDa 
     Call Initialized() 
     .SelectCommand = New OleDb.OleDbCommand() <-------- Error appears here. 
     .SelectCommand.CommandText = "SELECT * FROM [HighSchool] WHERE [LastName] Like '%%" & TBSearch.Text & "%%' or [FirstName] Like '%%" & TBSearch.Text & "%%' or [MI] Like '%%" & TBSearch.Text & "%%'" & _ 
     "Or [Gender] Like '%%" & TBSearch.Text & "%%' or [Address] Like '%%" & TBSearch.Text & "%%' or [Birthday] Like '%%" & TBSearch.Text & "%%' or [RNumber] Like '%%" & TBSearch.Text & "%%'" & _ 
     "Or [ENumber] Like '%%" & TBSearch.Text & "%%' ORDER By LastName ASC" 
     .SelectCommand.Connection = OleCn 

     Call PopulateListView() 

     If Me.LV.Items.Count >= 1 Then 
      MsgBox(Me.LV.Items.Count & " Record(s) found for " & "(" & Me.TBSearch.Text & ")", MsgBoxStyle.OkOnly, "Record(s) found...") 
     Else 
      MsgBox("No record(s) found for " & "(" & Me.TBSearch.Text & ")" & " , please try again... ", MsgBoxStyle.Critical, "No record found...") 
      TBSearch.Focus() 
      TBSearch.SelectAll() 
     End If 
    End With 
    Call CloseConnection() 
End Sub 

這裏是我的填充ListView控件代碼:

Public Sub PopulateListView() Me.LV.Items.Clear() Dim OleDr As OleDb.OleDbDataReader OleDr = OleDa.SelectCommand.ExecuteReader()

Do While OleDr.Read() 
     Dim Item As New ListViewItem 
     Item.Text = IIf(OleDr.IsDBNull(0), "", OleDr.Item(0)) 
     For shtCntr = 1 To OleDr.FieldCount() - 1 
      If Not OleDr.IsDBNull(shtCntr) Then 
       Item.SubItems.Add(OleDr.Item("FirstName")) 
       Item.SubItems.Add(OleDr.Item("LastName")) 
       Item.SubItems.Add(OleDr.Item("MI")) 
       Item.SubItems.Add(OleDr.Item("Gender")) 
       Item.SubItems.Add(OleDr.Item("Address")) 
       Item.SubItems.Add(OleDr.Item("Birthday")) 
       Item.SubItems.Add(OleDr.Item("RNumber")) 
       Item.SubItems.Add(OleDr.Item("ENumber")) 
      Else 
       Item.SubItems.Add("") 
      End If 
     Next shtCntr 
     Me.LV.Items.Add(Item) 
    Loop 
End Sub 
+0

哪一行是拋出錯誤? – 2014-12-08 08:01:36

+1

.SelectCommand =新OleDb.OleDbCommand()<---在這裏錯誤sir – user2926827 2014-12-08 08:04:27

+0

可能重複[什麼是NullReferenceException,我該如何解決它?](http://stackoverflow.com/questions/4660142/what- is-a-nullreferenceexception-and-how-do-i-fix-it) – Plutonix 2014-12-08 12:43:35

回答

2

好吧,讓我們修正了一些東西。

  1. 請勿使用Call。這只是VB 6(即90年代後期)的延期
  2. 不要使用Exit Sub。改爲使用Return。 (原因與#1相同)
  3. 使用參數化的SQL而不是字符串連接。您的代碼就像是不會有人搜索「O'Mally」一樣。

    Private Sub BtnSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnSearch.Click 
        If TBSearch.Text = "" Then 
         MsgBox("Please enter keyword to search...", MsgBoxStyle.Information, "Keyword to search...")` 
         TBSearch.Focus() 
         Exit Sub 
        End If 
        Call OpenConnection() 
        With OleDa 
         Call Initialized() 
         .SelectCommand = New OleDb.OleDbCommand() 
         .SelectCommand.CommandText = "SELECT * FROM [HighSchool] WHERE [LastName] Like @TBSearch or [FirstName] Like @TBSearch or [MI] Like @TBSearch Or [Gender] Like @TBSearch or [Address] Like @TBSearch or [Birthday] Like @TBSearch or [RNumber] Like @TBSearch Or [ENumber] Like @TBSearch ORDER By LastName ASC" 
         .SelectCommand.Connection = OleCn 
         .SelectCommand.Parameters.AddWithValue("@TBSearch", "%" & TBSearch.Text & "%") 
    
         Call PopulateListView() 
    
         If Me.LV.Items.Count >= 1 Then 
          MsgBox(Me.LV.Items.Count & " Record(s) found for " & "(" & Me.TBSearch.Text & ")", MsgBoxStyle.OkOnly, "Record(s) found...") 
         Else 
          MsgBox("No record(s) found for " & "(" & Me.TBSearch.Text & ")" & " , please try again... ", MsgBoxStyle.Critical, "No record found...") 
          TBSearch.Focus() 
          TBSearch.SelectAll() 
         End If 
        End With 
        Call CloseConnection() 
    End Sub 
    

至於你的錯誤,唯一可能的原因是OleDaNothing

+0

錯誤依然在.SelectCommand =新OleDb.OleDbCommand() – user2926827 2014-12-08 08:13:01

+0

請幫我解決我的代碼。謝謝 – user2926827 2014-12-08 08:23:45

+0

@ user2926827請耐心等待。請提供您收到的完整錯誤消息。 – cybermonkey 2014-12-08 09:57:59

相關問題