2014-03-30 34 views
0

網,我試圖瞭解如何顯示查詢結果到數據網格,每當我點擊搜索按鈕作爲查詢觸發事件。 但是,當我點擊搜索按鈕但沒有任何反應,但給我一個錯誤消息(請參閱錯誤消息的截圖鏈接),我不明白。VB SQL訪問選擇其中類似的聲明

錯誤:http://s1.postimg.org/di091riv3/error1.jpg

能否請你點我在正確的軌道,謝謝。

這是我下面

Imports System.Data.OleDb 

Public Class SearchForm 
    Dim con As New OleDbConnection 



    Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles Statd.SelectedIndexChanged 

    End Sub 


    Private Sub SearchButton_Click(sender As Object, e As EventArgs) Handles SearchButton.Click 

     con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source= c:\Databse\Company_db.accdb" 
     con.Open() 


     Dim sqlQuery As String 
     Dim sqlCommand As New OleDbCommand 
     Dim sqlAdapter As New OleDbDataAdapter 
     Dim Table As New DataTable 
     Dim empNum As String 
     Dim empLname As String 
     Dim empDept As String 
     Dim empStat As String 


     empNum = eNumText.Text 
     empLname = empLnameText.Text 
     empDept = Deptd.Text 
     empStat = Statd.Text 

     sqlQuery = "SELECT * FROM tbl_empinfo WHERE LastName like '% " & empLnameText.Text & "' " 

     ' MsgBox("Employee Number " + empNum + empLname + empDept + empStat) 'test statement 


     With sqlCommand 
      .CommandText = sqlQuery 
      .Connection = con 

      With sqlAdapter 
       .SelectCommand = sqlCommand 
       .Fill(Table) 

      End With 

      For i = 0 To Table.Rows.Count - 1 
       With DataGridView1 
        .Rows.Add(Table.Rows(i)("EmpID"), Table.Rows(i)("FirstName"), Table.Rows(i)("LastName"), Table.Rows(i)("Department"), Table.Rows(i)("Position"), Table.Rows(i)("Status"), Table.Rows(i)("Years")) 

       End With 
      Next 


     End With 






     con.Close() 
    End Sub 
+0

此代碼將會受到SQL注入攻擊的影響。 –

+0

@JoelCoehoorn有什麼建議嗎?這段代碼它不給我任何東西,但這個錯誤http://s1.postimg.org/di091riv3/error1.jpg我必須改變屬性的東西嗎? – user3476579

回答

0
Private Sub SearchButton_Click(sender As Object, e As EventArgs) Handles SearchButton.Click 
    sqlQuery = "SELECT * FROM tbl_empinfo WHERE LastName like '%' + ? + '%' " 

    'It's counter-intuitive, but it's best in .Net to use a new connection object each time 
    Using con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source= c:\Databse\Company_db.accdb"), _ 
      cmd As New OleDbCommand(sqlQuery, con) 

     'Use actual column type and length here 
     cmd.Parameters.Add("?", OleDbType.NVarChar, 50).Value = empLnameText.Text 

     con.Open() 
     DataGridView1.DataSource = cmd.ExecuteReader() 
    End Using 
End Sub 
+0

我試圖用你的代碼替換我的代碼,並填充數據,但它閃過我一個空的數據網格,給了我同樣的錯誤http://s1.postimg.org/di091riv3/error1.jpg,請讓我知道我做錯了什麼,謝謝 – user3476579

+0

如果它閃爍了網格,那麼這段代碼可能會運行正常,並且在此之後會導致異常。如果網格爲空,請確保您正在搜索實際存在的內容。拋出異常時,visual studio突出顯示哪一行? –

+0

我已經消除了錯誤,它給了我一個空白的網格。我試着按照int文本框設置過濾器,但它給了我一個空的網格。什麼可能是錯的?這個參數是否錯誤? cmd.Parameters.Add( 「姓」,OleDbType.VarChar,50)。價值= empLnameText.Text DataGridView1.DataSource = cmd.ExecuteReader() – user3476579

0

try代碼改變%*在查詢中,就像這樣:

sqlQuery = "SELECT * FROM tbl_empinfo WHERE LastName like '* " & empLnameText.Text & "' " 

Access不使用%wildcard

http://www.techonthenet.com/access/queries/like.php

+0

我試圖此代碼http://pastebin.com/16w1dAC0恰好過濾所述搜索與文本框中的內容是給我一個錯誤,它是highliting。填充(表),我真的不知道如何顯示查詢結果到數據網格。請幫忙 – user3476579

0

我發現使用%的錯誤。它用於SQL Server和非訪問SQL使用*代替%