2009-07-08 5 views
0

データセットをインメモリ・データストアとして使用したいと考えています。 私は、SELECT、INSERT、UPDATE、DELETE、CREATE TABLE、DROP TABLE、ALTER TABLE ADD COLUMN、ALTER TABLE DROP COLUMNを使用し、制約PRIMARY KEY、UNIQUE、NOT NULL、FOREIGN KEY、REFERENCESをサポートしたいと考えています。データセットに対してSQL文を実行するにはどうすればいいですか

+0

これを行う理由を拡張できますか?それはより有用な答えを生み出すのに役立ちます。 –

+0

私たちの多くがJJSの質問にどのように答えてくれたかは素晴らしいです。しかし、彼が実際に望んでいたことを教えてくれると返事があったとすれば、さらに良いことになりました。もし彼が返事をしたら、答えのどれが彼が望むものに近いのか見ていくことは面白いでしょう。 –

+0

申し訳ありません。この質問の電子メールアップデートを有効にしませんでした。私は私の返信が来ていないと言っている私的なメッセージを歓迎したでしょう。 DataSetの構造を問い合わせるためのオブジェクトモデルとインターフェイスは、すでに堅牢で、よく理解されています。 DataSetとDataTableのオブジェクトとそれらの構成要素を置き換えて混乱を減らすならば、私はそのことに関係する提案に触れています。 – JJS

答えて

0

申し訳ありませんが、それはデータセットの対象ではありません。

なぜこれをやりたいですか?

+0

誰が、それはデータセットの目的ではないと言いますか? DataSetには完全なオブジェクトモデル、よく知られたインターフェイス、デザイナサポート、およびデバッグビジュアライザが用意されています。 「データセット」に関する情報を表示するためにホイールを再発明するのはなぜですか? – JJS

+0

誰が言う?過去7年間の使用経験と、マイクロソフトと他の誰かがそれについて語ったことを読んでください。データセットがクエリを発行するものであることを誰も提案したことはありません。フィルタリングと並べ替え(DataViewを使用)はい、一般的なクエリプラットフォームではありません。これがSQL Server ExpressとCompactの目的です。 –

2

これは.Netですか?どのバージョン? 3.5以降では、IQueryableでSQLのようなlinqクエリを実行できます

+0

はい。データセットは、.Net以外のすべてのAPIで利用できません。 IQueryableは、オブジェクトのスキーマを変更するという概念をサポートしていません。私が間違っている場合は私を修正してください、しかし、Linqはクエリされたオブジェクトのスキーマを操作するクエリ演算子を定義していません。 – JJS

+0

この人は、標準的なクエリ演算子の能力とオブジェクト定義の構造を変更する能力についてRTFMさえしなかったときに、これを投票しました。はい、射影演算子がありますが、それはSQLのDDL文法とほとんど同じです。 – JJS

2

データセットではなく、データベースのようなサウンドが必要です。

+0

訂正のコメントを参照してください。データベースの構造を調べるためにDataSetと非常によく似たAPIを持つ完全なオブジェクトモデルを提供すれば、メモリ内のデータベースを使用することができます。神の提案? – JJS

+0

誰がCodyが.Net APIを使用してメモリ内のデータベースを推薦することさえできなかったときにこれを票決しましたか? – JJS

3

メモリ内のデータストアでデータベースコマンドをテストする場合は、メモリ内のリレーショナルデータベースエンジンではないため、DataSetを使用する方法はありません。他の人は言っているように、DDLコマンドではなく、DataSetであらゆる種類のクエリを実行できます。私はさまざまなメモリ内または組み込みのデータベースエンジン(SqlLite、HSQL、Firebird)を見てきましたが、一般的にこれらのエンジンの制限のために、メモリ内のユニットテストSQL Serverコードに良い方法を見つけることに近づくことはありませんでした)。

アプリケーションに組み込みデータベースが必要な場合は、それらの製品を参照してください。 Sql Serverコマンドをテストする必要がある場合は、Sql Serverのインスタンスでそれらを実行する必要があります(Express、軽量、無料)。

+0

私はDDLコマンドをメモリ内のストアでテストしたくありません。私は、SQLがDataSetインスタンスを操作するために提供する、明確に定義された文法を使用することに重点を置いていました。 – JJS

+0

次に、質問を更新して、実際に文法を気にかけないようにする必要があります。これは、必要なAPIの単なる例です。 –

1

短い説明では、DataSetやその他の.NETデータ型でこれらの操作を実行できないということです。これらのコマンドはデータ自体に固有のものではなく、SQLをサポートするデータベースソフトウェアの一部です。これらの操作は、データベースサーバーや組み込みデータベースのようなものをサポートするソフトウェアでのみ使用できます。

あなたのしていることによっては、linqが役に立つかもしれませんが、あなたが言及した正確なSQL構文または仕様言語のビットを提供しません。 (ALTER TABLEなど)

プロジェクトで外部データベースを使用していない場合は、埋め込みデータベース(sqliteFirebird、それ以外は何もわかりません)を使用することを検討することもできます。

+0

DataSetインスタンスでこれらの操作をnativlyできないことはわかっています。私は操作を行うことができる補足的なAPIを誰かが知っているかどうか尋ねました。 – JJS

1

LINQしたい!それはあなたがあなたのデータに求めたすべての行動を実行することができます...そして、はるかにあなたがセクシーな気持ちを与えている間に、おそらくそれは簡単ではないはずです。それが戻ってデータベースへのメモリデータであなたを読み/書きに来るとき、それはもう少し提供していますよう

(あなたがとにかくADO.NETするために使用されている場合)、それはあなたのボックスをロックします

もLinq2SQLを見てください。 ..またはlinq2xml Webサービスを使用する場合。

+0

テーブルから列を追加または削除できるLinq演算子が欠落しているはずです。そのメソッドが何であるかについて、MSDNドキュメントのURLを送ってください。 – JJS

+0

おい、Googleを使って、チュートリアルを読んで、その答えが好きではないように、あなたは働きません。あなたの返事のいくつかは失礼です、私はあなたの周りに狩りの時間を過ごすしたくないです。ここの人々は、あなたが話したことに基づいてあなたを助けようとしています。 –

0

データセットが、取得したデータのクライアント側のメモリ内表現であるため、この操作を行うことはできません。

また、そのデータの提供元にという異例のです。そのため、データの元となるデータソースと同じ構文を使用することはできません。

データセットにはデータをフィルタリングするための独自の構文がありますが、SQLに大きく依存していません。

むしろ、あなたはあなたのDataSet内のデータを照会することで、より-SQLのような経験を与えるであろうLINQ to DataSetsを使用する必要があります。

0

あなたはLINQ(例えば.NET 2.0)を使用したくない場合は、「節のような」構文でフィルタを提供することを可能にする「選択」する方法があります。ここでは、MSDNのリンクがあります:

http://msdn.microsoft.com/en-us/library/system.data.datatable.select

これはので、私はそれはあなたが探しているものをすべて提供していることを知らないDataTableの方法です。また、更新/挿入/削除を実行せずに、データセットのサブセットのみを選択することもできます。

0

一時テーブルを使用することを検討してください。または、データベース接続間でデータを共有する必要がある場合は、標準テーブルにもなります。

メモリ内のデータセットの速度を求めている場合は、メモリ内のテーブルストレージ(MySQLとPostGreSQLなど)を調べ、テーブルストレージを設定することで他の人に騙される可能性があります例えば、RAMディスク上のスペース)。

短命テーブルはしばしば見落とさ、彼らは実際には非常に参考にされています。

関連する問題