teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記&訂正

2019/11/15 02:15

投稿

退会済みユーザー
answer CHANGED
@@ -13,7 +13,7 @@
13
13
 
14
14
  **【追記】**
15
15
 
16
- 忘れていましたが上に紹介した記事よりもっといい具体例を思い出ましたので紹介します。同じ Teratail の以下のスレッドを見てください。
16
+ 忘れていましたが上に紹介した記事よりもっといい具体例を思い出ましたので紹介します。同じ Teratail の以下のスレッドの私 SurferOnWww の回答を見てください。
17
17
 
18
18
  取込むCSVのフォーマットチェック
19
19
  [https://teratail.com/questions/197089](https://teratail.com/questions/197089)

1

追記

2019/11/15 02:15

投稿

退会済みユーザー
answer CHANGED
@@ -9,4 +9,46 @@
9
9
  CSV パーサー
10
10
  [http://surferonwww.info/BlogEngine/post/2010/10/28/CSV-parser.aspx](http://surferonwww.info/BlogEngine/post/2010/10/28/CSV-parser.aspx)
11
11
 
12
- 選択肢の一つに加えて検討してみてはいかがでしょう。
12
+ 選択肢の一つに加えて検討してみてはいかがでしょう。
13
+
14
+ **【追記】**
15
+
16
+ 忘れていましたが上に紹介した記事よりもっといい具体例を思い出さましたので紹介します。同じ Teratail の以下のスレッドを見てください。
17
+
18
+ 取込むCSVのフォーマットチェック
19
+ [https://teratail.com/questions/197089](https://teratail.com/questions/197089)
20
+
21
+ CSV ファイルは、Microsoft のサンプルデータベース Northwind の Products テーブルから SSMS を使ってエクスポートしたものを使います。上に紹介したスレッドの私の回答の画像を見てください。
22
+
23
+ それに、以下の画像のとおり重複するレコードを追加しておきます。
24
+
25
+ ![イメージ説明](c5d6943a902a852d1379fae8d8f07404.jpeg)
26
+
27
+ 上に紹介したスレッドの私の回答のコードの SELECT クエリに DISTINCT を追加して重複排除し、ORDER BY [UnitPrice] を追加して UnitPrice 順に並べ替えてみます。JET は ACE に代えてみました。以下の通りです。
28
+
29
+ ```
30
+ private void Form12_Load(object sender, EventArgs e)
31
+ {
32
+ //接続文字列。HDR = Yes で一行目をヘッダーとして扱う
33
+ // 2019/11/15 Teratail のスレッド https://teratail.com/questions/223119 の検証用に
34
+ // JET を ACE に変更し、csv ファイルに重複項目を追加し、SELECT クエリに DISTINCT と ORDER BY を追加
35
+ string conString =
36
+ //"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
37
+ "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
38
+ this.path +
39
+ ";Extended Properties=\"text;HDR=Yes;FMT=Delimited\"";
40
+
41
+ OleDbConnection con = new OleDbConnection(conString);
42
+ string commText = "SELECT DISTINCT [ProductID],[ProductName],[UnitPrice],[Discontinued] FROM [" + this.filename + "] ORDER BY [UnitPrice]";
43
+ OleDbDataAdapter da = new OleDbDataAdapter(commText, con);
44
+
45
+ DataTable dt = new DataTable();
46
+ da.Fill(dt);
47
+
48
+ this.bindingSource1.DataSource = dt;
49
+ }
50
+ ```
51
+
52
+ 結果は以下の通りで、重複は排除され、UnitPrice 順に並べ替えられています。
53
+
54
+ ![イメージ説明](97917812b44faa71263c2bd0739c2338.jpeg)