型なしのDataTableにdecimal型のデータを入れた行を追加して、
それをcastで取り出そうとしたら以下のエラー
指定されたキャストは有効ではありません。
//DataTable作成 DataTable dt = new DataTable(); dt.Columns.Add("cd"); dt.Columns.Add("data"); //行を追加 DataRow dr = this._foreCastTable.NewRow(); dr["cd"] = Cd; dr["data"] = data; dt.Rows.Add(dr); //データ取り出し DataRow[] drs = dt.Select("cd = 'AAA' ") foreach (DataRow dr in drs){ decimal data = (decimal)dr["data"] //ここでエラー Console.WriteLine( data ); }
DataRowのカラムはobject {string}という型を持っていて内部的にstringらしい。
対処方法
DataTableにカラムを追加するときに、型まで指定すると素直にCastできる
dt.Columns.Add("data");
を
dt.Columns.Add("data",Type.GetType("System.Decimal"));
にする。
もしくはデータを取り出すときに
decimal data = System.Convert.ToDecimal(dr["data"]);
とすればOKだった