【解決方法】C# で DataTable を検索する方法

プログラミングQA


これを実行しても何も起こりません
データグリッドビューは更新されません

C#
public void Search() 
{
   OleDbCommand ocm = new OleDbCommand("SELECT Firstname FROM students WHERE Firstname LIKE '% Hello %' ", conn);
   conn.Open(); 
   ocm.ExecuteNonQuery(); 
   conn.Close(); 
}

解決策 1

ExecuteNonQuery は、INSERT、DELETE、UPDATE などのコマンドを発行するように設計されています。 SELECT での使用は意図されていません。 あなたができることは、次のように ExecuteDataReader を使用することです:

C#
private List<string> names = new List<string>();
public void Search() 
{
  using (OleDbCommand ocm = new OleDbCommand("SELECT Firstname FROM students WHERE Firstname LIKE '% Hello %' ", conn))
  {
    conn.Open(); 
    OleDbDataReader reader = ocm.ExecuteDataReader(); 
    while (reader.Read())
    {
      names.Add(reader[0]);
    }
    conn.Close(); 
  }
}

解決策 2

DataAdapter を使用して、データベースからテーブルを取得できます。

C#
conn.Open();
OleDbDataAdapter ad = new OleDbDataAdapter("", conn);
DataTable dt = new DataTable();
ad.Fill(dt);
gridView.DataSource = dt;

解決策 3

こんにちは。次のコードを参照できます。

C#
public void Search()
 {
   using (OleDbConnection con = new OleDbConnection(constring))
   {
      con.Open();
      OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT Firstname FROM students WHERE Firstname LIKE '% Hello %' ", con);
      DataTable tb = new DataTable();
      adapter.Fill(tb);
      dataGridView1.DataSource = tb;
   }
}

ご不明な点がございましたら、お問い合わせください。

解決策 4

LINQ-To-DataSet (which i prefer):

var filtered = tb.AsEnumerable()
    .Where(r => r.Field<String>("CREATOR").Contains(searchstring));
ADO.NET(DataTable.Select):

DataRow[] filteredRows = tb.Select("CREATOR LIKE '%" + searchstring + "%'");
ADO.NET(DataView.RowFilter):

 tb.DefaultView.RowFilter = "CREATOR LIKE '%" + searchstring + "%'";

コメント

タイトルとURLをコピーしました