2014-12-08 45 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

相关问题