2016-01-21 79 views
0

我有一個SQL表,承載數據根據日常活動而變化。我有一個C#WPF應用程序,我試圖設置查看此SQL數據。工作原理:您輸入某人的姓氏並單擊搜索,然後listview將顯示基於SQL命令的數據。WPF Listview搜索SQL表的數據

這裏是XAML代碼中,我爲ListView:

<ListView x:Name="searchedList" HorizontalAlignment="Left" Height="190" Margin="10,20,0,0" VerticalAlignment="Top" Width="555" Grid.ColumnSpan="2" ItemsSource="{Binding Source=Server}"> 
       <ListView.View> 
        <GridView> 
         <GridViewColumn Header="Name" Width="120" DisplayMemberBinding="{Binding NameColumn}"/> 
         <GridViewColumn Header="TimeA" Width="70" DisplayMemberBinding="{Binding TimeAColumn}"/> 
         <GridViewColumn Header="TimeB" Width="70" DisplayMemberBinding="{Binding TimeBColumn}"/> 
         <GridViewColumn Header="TimeC" Width="70" DisplayMemberBinding="{Binding TimeCColumn}"/> 
         <GridViewColumn Header="DateA" Width="120" DisplayMemberBinding="{Binding DateAColumn}"/> 
         <GridViewColumn Header="DateB" Width="120" DisplayMemberBinding="{Binding DateBColumn}"/> 
        </GridView> 
       </ListView.View> 
      </ListView> 

這裏是代碼的C#部分:

private void btnSearch_Click(object sender, RoutedEventArgs e) 
    { 
     try 
     { 
      SqlConnection con = new SqlConnection("mysqlconnection"); 
      DataSet ds; 
      SqlDataAdapter da; 
      SqlCommandBuilder scb; 
      DataTable dt; 

      da = new SqlDataAdapter("SELECT * FROM [table] WHERE [NameColumn] LIKE '%'" + txtSearch.Text + "'%' OR [DateAColumn] LIKE '%'" + txtSearch.Text + "'%' OR [TimeAColumn] LIKE '" + txtSearch.Text + "' OR [TimeBColumn] LIKE '" + txtSearch.Text + "' OR [TimeCColumn] LIKE '" + txtSearch.Text + "'", con); 
      ds = new DataSet(); 
      dt = new DataTable(); 
      ds.Clear(); 
      da.Fill(dt); 
      searchedList.ItemsSource = dt.DefaultView; 

      con.Open(); 
      con.Close(); 
     } 
     catch 
     { 
      return; 
     } 

    } 

但是在別人的姓氏,那絕對是打字時在數據庫中,Listview不會填充所需的數據。我似乎無法找到我出錯的地方,當然我對於C#中的WPF還是比較新的。 (這是一個搜索功能,所以它確實需要空白,直到搜索數據。)

+2

你應該使用基於參數查詢。您的單引號放置不正確。例如:LIKE'%'「+ txtSearch.Text +」'%'應該是LIKE'%「+ txtSearch.Text +」%'「 –

+0

@Anup Sharma非常好,現在它正在填充。將其標記爲對其他人的回答。謝謝你:) –

+1

好的事情也會做:使用TPL(任務等)查詢另一個線程,也不要只吃掉所有發現的錯誤,並做沒有任何關於它們的信息,也可以使用finally(來自try-catch)來確保即使出現錯誤,您的數據庫連接總是被關閉。但是,嘿,我很確定上面的代碼可能用於測試/學習的目的而不是生產代碼。:) –

回答

1

基礎上的評論,下面是答案:

注:必須使用基於參數的查詢,否則你正在邀請SQL注入攻擊。

從這個

除此之外,

通配符(%,_,等)必須與您傳遞的值沿着單引號內。

因此,試試這個:

'%" + txtSearch.Text + "%'" 

而不是

'%'" + txtSearch.Text + "'%'