- - PR -
テーブルの型と桁数の取得方法
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-10-10 18:37
はじめまして。KOKOと申します。
新参者ですがよろしくお願いいたします。m(__)m 皆様の知恵を拝借したいのですが、 現在、VB.net2003 + SQLServer2000にて、Windowsアプリを開発しております。 そこで、テーブル名だけを引数として受け取ったら、 グリッド上にデータを表示して編集できるような簡単な 共通マスタメンテ画面を作成しようとしています。 仕組みはシンプルで、データを表示する際のロジックはこんな感じです。 Sub グリッドにデータを表示(ByVal pテーブル名$) Dim sql$ = "select * from " & pテーブル名$ Dim myConn As New SqlConnection(strCon$) Dim myDataAdapter As New SqlDataAdapter Dim ds As New DataSet myDataAdapter.SelectCommand = New SqlCommand(sql$, myConn) myConn.Open() myDataAdapter.Fill(ds) DataGrid.DataSource = ds.Tables(0) End Sub その際に、グリッドの列幅をデフォルト設定ではなく、 テーブルの桁数の取得方法 データの桁数に応じて動的に変更したいと思っています。 (してくれ、といわれたw) そこで、DB上のデータ型と桁数の定義を取得できれば、 (nvarcharの10とか、intの4とか) それで、ルールに基づいて列幅を設定しようかと思ってますが、 その、型と桁数の取得方法がわからず困っています。。。 (もしかすると、もうひとつ何らかのデータ型を 取得するようなSQLを投げないといけない?) もしご存知の方がいらっしゃれば、ご教授いただければ幸いです。 (もちろん、すべてのセルの中身を精査して、取得した文字列の レングスから調整するということは考えましたが、 あまり効率のいいやり方と思えないので、できれば別の方法で 実現したいと思っています。 (後学のためにも、ぜひ知っておきたいと。。)) よろしくお願いいたします。 | ||||
|
投稿日時: 2004-10-10 21:45
DataColumn.MaxLength プロパティ にお望みのデータがあると思ったら、ここには入っていませんでしたね。
ここのデータは、セットしたら制限が働くようです。 SqlParameter.Size プロパティで string の場合列内のデータの最大サイズをバイト単位で取得できます。 SqlParameter.SqlDbType プロパティか SqlParameter.DbType プロパティでType が取得できます。 InsertCommand を作っているのであれば、myDataAdapter.InsertCommand.Parameters[i].Size で取得できます。 グリッド上にデータを表示して編集するからには作ってますよね。 _________________ えムナウ Microsoft MVP for Visual Developer - C#,2005/01-2007/12 えムナウのプログラミングのページ Blog1 Blog2 | ||||
|
投稿日時: 2004-10-10 22:02
南部です。 動的に変更するといっても、限度があるとは思いますが、 (varchar(2000)とかいってもね、、) とりあえず、SQLServer2000だと、こんな感じでしょうか。 select a.name, b.name, a.length from syscolumns a, systypes b where id = object_id('テーブル名') and a.xtype=b.xtype order by a.colid | ||||
|
投稿日時: 2004-10-11 10:52
今日は
myDataAdapter.Fill(ds) の所に下記を追加すると、DataColumn.MaxLengthやその他の情報も見えます。 myDataAdapter.FillSchema(ds, SchemaType.Mapped) | ||||
|
投稿日時: 2004-10-12 11:06
KOKOです。
えムナウ様、nanbu様、rvmx様: 早速の有益な情報の提供ありがとうございます。 > グリッド上にデータを表示して編集するからには作ってますよね。 うう。。。 基本的に、テーブル名だけを受け取って、 Select以外は、SqlCommandBuilderで作成していたのですが。。 試してみましたが、SqlCommandBuilderで各コマンドを生成した場合、 Parametersの値はどうも入っていないようです。これが取れれば一番よかったのですが。。。 FillSchemaですか!これは便利ですね。 SqlDbTypeとかは取れないようですが、 MaxLength等の情報が見えるようになるのは何かと役に立ちそうです。 さしあたってはnanbu様に教えていただいたSQLを同時に発行する方法を検討していますが、 (varchar(2000)とかいわれたら、もちろん途中で切るような形になりますが。。) せっかくなので、事前にデータアダプタを作成しておくとか、単純にMaxLengthで サイズを切るような方法も含めて再検討してみたいと思います。 ありがとうございました。m(__)m |
1