C#.NETのサンプルコードを掲載しています。
      
Selectメソッドの注意点
Selectメソッドのfilterに用いる条件式は要注意です。
DataTableのカラムの型がStringで、条件式に単一引用符(')を
付けないと、例外が発生したり、正しく結果を取得できない場合があります。

この記事は以下のページで掲載されています。
http://connect.microsoft.com/VisualStudioJapan/feedback/details/504999/datatable-select

原因は条件式に単一引用符(')を付けてないので数値型として処理されるためです。

エラーとなるサンプルコード
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

DataSet dataset = new DataSet();
DataTable dt = new DataTable("Table1");

// 列を定義します。
dt.Columns.Add("ID", typeof(string));

DataRow row = null;

// レコードを追加します。
for (int i = 0; i < 100; i++)
{
    row = dt.NewRow();
    row["ID"] = i.ToString();
    dt.Rows.Add(row);
}

// DataSetにテーブルを追加します。
dataset.Tables.Add(dt);
dataset.Tables["Table1"].AcceptChanges();

DataRow[] dataRows = null;

for (int i = 0; i < 100; i++)
{
    try
    {
        dataRows = dataset.Tables["Table1"].Select("ID = " + i);
        Console.WriteLine(i + " で処理しました。");
    }
    catch (Exception)
    {
        Console.WriteLine(i + " で例外が発生しました。");
    }
}


出力
0 で処理しました。
1 で処理しました。
2 で処理しました。
3 で処理しました。
4 で処理しました。
5 で処理しました。
6 で処理しました。
7 で処理しました。
8 で処理しました。
9 で処理しました。
10 で処理しました。
11 で処理しました。
12 で処理しました。
13 で処理しました。
14 で処理しました。
15 で処理しました。
16 で例外が発生しました。
17 で処理しました。
18 で処理しました。
19 で例外が発生しました。
20 で例外が発生しました。
21 で例外が発生しました。
22 で処理しました。

99 で処理しました。

条件式に単一引用符(')で囲ってやれば正常に処理されます。
テストコード
1
dataRows = dataset.Tables["Table1"].Select("ID = '" + i + "'");

出力
0 で処理しました。
1 で処理しました。
2 で処理しました。

99 で処理しました。
      
関連ページ
DataSet






Copyright (C) 2011 - 2017 猫の気ままなC#日記