罠っていうか勝手にはまってるだけなんですが。。。

String型の列を定義して例えばコードみたいな感じで使う場合に、 数値として見たときにIntの最大値を超えてるとWhereで落ちる。

Whereの書き方もダメなんだけど、この書き方をすると動いたり動かなかったりするのでちゃんと書かないとね。

public void test()
{
    DataSet ds = new DataSet();
    DataTable dt = new DataTable();

    dt.Columns.Add("数字", Type.GetType("System.String"));

    DataRow row = dt.NewRow();
    row["数字"] = "0123456";
    dt.Rows.Add(row);
    row = dt.NewRow();
    row["数字"] = "2147483647";//こっちだと落ちない
    //row["数字"] = "2147483648";//こっちだと落ちる
    dt.Rows.Add(row);
    ds.Tables.Add(dt);

    dt.TableName = "Table1";

    try
    {
        //string wkWhere = String.Format("数字 = {0}", "12345678");//こっちは落ちる
        string wkWhere = String.Format("数字 = '{0}'", "12345678");//こっちは大丈夫
        dt.Select(wkWhere);
    }
    catch(Exception ex)
    {
        Console.WriteLine(ex.Message);
    }

    Console.WriteLine("Finish");
    Console.ReadLine();

}