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


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



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

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

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



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

  1. SqlDataAdapter ad = new SqlDataAdapter();
  2. ad.SelectCommand = cmd;
  3. DataTable dt = new DataTable();
  4. ad.Fill(dt);
  5. DataTableReader rd = dt.CreateDataReader();
  6. DataTable sc = rd.GetSchemaTable();

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


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

コメント

このブログの人気の投稿

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