- - PR -
空のDataSetの作成方法について
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-05-20 17:13
お世話になっております
現在vb.net + SQLSERVER 2000で開発を行っておりますが、Vb6.0の頃に存在した Redimがなくなってしまったため、代わりに空のDatasetを 使用しております。 この空のDataSetの作成ですが、現在ダミーテーブルを作成して、SELECT文を発行 し、Fillを行うというやり方をとっていますが、コマンドで作成することは できないのでしょうか? もし、ご存知の方がいらっしゃいましたらお教えください。 | ||||||||
|
投稿日時: 2004-05-20 17:57
背古井さん、こんばんは。
えっ??? Redimって、ReDim ステートメントのことですか? だとしたら、無くなってませんけど...。
「コマンドで作成」っていうのが良く判りませんが、 Dim Ds As DataSet = New DataSet とか、そういう事ではなくて? # SQL コマンド? | ||||||||
|
投稿日時: 2004-05-20 18:12
きくちゃんさん
わかりにくくてすいません。 引用: -------------------------------------------------------------------------------- >Redimって、ReDim ステートメントのことですか? >だとしたら、無くなってませんけど...。 -------------------------------------------------------------------------------- すいません。共通変数として使えなくなったことがいいたかったんです。 引用: -------------------------------------------------------------------------------- 「コマンドで作成」っていうのが良く判りませんが、 Dim Ds As DataSet = New DataSet とか、そういう事ではなくて? # SQL コマンド? -------------------------------------------------------------------------------- そうです。ダミーテーブルを作成して、ADO.NETでSQLコマンドを発行することで DataSetを作成しているんです。 具体的にいうとこんな感じです。 ' 引数 :Colcnt = 必要な列数 ' :TblName = セットするテーブル名 ' :RetDs = セットするデータセット Dim AdoNet As New Cls_ADONET() Dim WK_SQL As String Dim I As Integer = 1 WK_SQL = "" WK_SQL = WK_SQL & "SELECT " & vbCrLf If Dim_LargeColNo = "0" Then WK_SQL = WK_SQL & "LEARGEEDIT" & vbCrLf Else WK_SQL = WK_SQL & "EDIT" & vbCrLf End If For I = 1 To Colcnt - 1 If Dim_LargeColNo <> "" Then If CInt(Dim_LargeColNo) = I Then WK_SQL = WK_SQL & ",LEARGEEDIT " & vbCrLf Else WK_SQL = WK_SQL & ",EDIT " & vbCrLf End If Else WK_SQL = WK_SQL & ",EDIT " & vbCrLf End If Next WK_SQL = WK_SQL & "FROM " & vbCrLf WK_SQL = WK_SQL & "TBL_BRANK " & vbCrLf 'データセットに代入する If AdoNet.Fnc_GetDatas(WK_SQL, TblName, RetDs) = False Then 'エラーメッセージを代入 Dim_Err = AdoNet.errMsg RetDs = Nothing GC.Collect() Exit Function End If でもこれデータベースを使わないシステムには応用できないんですよね・・・。 | ||||||||
|
投稿日時: 2004-05-20 18:35
Mickyでございます。
みなさま、いつもお世話になっております。
想像するに、Redimの様に可変のメモリエリアが欲しいだけなのかな? と思いました。 それで、代わりにDataSetを使って管理したいと思ったが、 DB接続もないのにどうやって使うのか?といった感じでしょうか? 的外れでしたらごめんなさいね(^^; もしそうなら、コレクションクラスについて調べてみてはいかがでしょうか? DataSetよりも軽快に使えると思います。 DataSetのいろんな機能を使いたいのであれば、 きくちゃんさんご指摘のように、 普通に Newすればあとはテーブルを作るなり好きなように 使うことができると思いますよ。 | ||||||||
|
投稿日時: 2004-05-20 19:07
例えば、 Public Class GlobalAccessable Public Shared RedimableValiable() As String End Class として、単独のファイルに書いておきます。すると、同じプロジェクトに属する他のファイルにあるクラスのメソッドからは、 Public Class Form1 〜略〜 Protected 何かのイベントハンドラ Count = 何かの数を数える Redim Preserve GlobalAccessable.RedimableValiable(Count) End Sub End Class と、使えます。 #こういう使い方が推奨されるかどうかは別の問題 でも、Redimにかかるコストを考えると、Mickyさんのコレクションクラス(System.Collections 名前空間)を使用する方がいいでしょう。 ↓↓ご指摘により、修正 [ メッセージ編集済み 編集者: Jitta 編集日時 2004-05-21 08:21 ] | ||||||||
|
投稿日時: 2004-05-20 21:03
NAL-6295です。 RedimableValiableの宣言が、Sharedじゃ無いのでコンパイルが通らないのでは? | ||||||||
|
投稿日時: 2004-06-08 13:47
返事が遅れてすいません
クラスで対応できそうです。 助かりました 皆さんありがとうございました。 | ||||||||
|
投稿日時: 2004-06-08 19:53
根本的な解決策がでてしまっているので蛇足となりますが。。。
プログラムでDataSetを作成する例は以下のような感じになります。 http://homepage3.nifty.com/dotnetfan/console/console17.html この例ではいったんスキーマを保存してますが、そんなことせずに 列のデータをどんどん追加していくことも当然可能です。 #まぁ、覚えておいて損はない、ということで。 |
1