[ADO]特定の列の重複を除いた行を表示する | Assertion Failed!

[ADO]特定の列の重複を除いた行を表示する

特定の列の重複を除いた行を表示する。


データを単純にバインドするだけでは、前回 のようにすべての行データが表示され、重複した

データが存在することになる。


このようなデータから、重複を除いたデータを抽出するためには、DataViewクラスを使用する。

(データベースからのSELECT 文の時点でdistinctを使用してもよいが、抽出条件を変えたい時には

 またデータベースにアクセスしないといけなくなるので、トランザクションが増えることになる。

 データは必要なときに一気に取得し、キャッシュしたデータの中から抽出操作を行ったほうがよいでしょう。)


string connectionString = "略";


using (SqlConnection connection = new SqlConnection(connectionString))
using (SqlCommand command = new SqlCommand("SELECT * FROM Employees", connection))
using (SqlDataAdapter adapter = new SqlDataAdapter(command))
using (DataTable table = new DataTable())

{
  table.Locale = CultureInfo.InvariantCulture;
  try
  {
    adapter.Fill(table);
  }
  catch (SqlException)
  {
  }

  

  using (DataView view = new DataView(table))

  {

    comboBox1.DataSource = view.ToTable(true, "City");

    comboBox1.DisplayMember = "City";

  }

}


DataViewのコンストラクタにDataTableを渡し、ToTable()メソッドの第一引数(distinct)にtrueを設定する。

第二引数に、重複を除く列名を指定すれば、重複が除かれたDataTableが生成される。


それを、コンボボックスにバインドすると、次のような結果となる。

前回 とちがい、London のデータが重複していないことがわかる。



Assertion Failed!