ADO.NETで列の桁数を得る方法


ADO.NETで、テーブルの列の桁数を知るにはどすればよいのか調べたところ、SqlDataReaderクラスのGetSchemaTableメソッドを使うらしい。



たとえば、10ケタで小数点以下が2ケタの数値列の情報を得るには下記のようにする。

SqlCommand cmd = new SqlCommand();             
cmd.Connection = cn; // コネクション
cmd.CommandText = "SELECT cast(1.234 as numeric(10,2)) [v]";
SqlDataReader rd= cmd.ExecuteReader(CommandBehavior.KeyInfo);
DataTable sc = rd.GetSchemaTable();

すると、scは以下のようになる。ちゃんと10と2がある。



同じことを非接続のdataTableでもやりたかったのだが、できなかった。DataTableからはSqlDataReader のオブジェクトを作れない。

SqlDataAdapter ad = new SqlDataAdapter();
ad.SelectCommand = cmd;
DataTable dt = new DataTable();
ad.Fill(dt);
DataTableReader rd = dt.CreateDataReader();
DataTable sc = rd.GetSchemaTable();

このときのscはこうなる。悲しいことに桁数が得られていない。


うまい方法はないものかしら。

コメント

このブログの人気の投稿

varchar をデータ型 numeric に変換中に、算術オーバーフロー エラーが発生しました。