2009-06-23 16 views
6

私はC#プログラムとSQLデータベースを接続するためにDataSetを使用しています。列の1つを列挙型にしたいので、コード内で列挙型として動作させたいと思います。これどうやってするの?DataSetの列挙型

答えて

8

私はみんなのバブルを破裂するという意味ではありませんが、あなたは簡単に厳密に型指定されたDataSetを使用して列挙型の整数をマッピングすることができます。私はいつもそれをする。全体をここに入力するのではなく、これを達成する方法を詳しく説明するentry on my Blogを作成しました。

+0

タク、それはまさに私が望んでいたものです。 – svick

+0

+1コンセプトの実証をしていい仕事。私はそれが型付きのデータセットで可能であることを知っていました。しかし、このアプローチでは、xsdが型指定されたデータセットデザイナーによって踏まれてしまうので、データセットを変更するたびにxsdファイルの変更をやり直す必要はありませんか? – James

+0

はい、問題のあるxsdが詰まってしまいます。 DataSetでカスタム列挙型を使用することを惜しみなく省き、メンテナンスを最小限に抑えることができます。しかし、私は整数に前後にキャストするのではなく、直接列挙型を扱うほうがはるかに好きです。私たちがこれを行う場所はほんのわずかで、そのデータセットはほとんど変更されないため、影響は最小限です。( – Josh

0

私はできないと思います。 SQL Serverには列挙型の概念がありません。

+0

私はそれがdatabseでどのように表現されるか気にしません。そこにはint型とstring型があります。 – svick

+0

気を付けなければなりません。あなたがデータベースで表現できないことの1つは列挙型です。 –

+0

気にしないのは嫌いですが、列挙型はIDと名前を持つルックアップテーブルで簡単に表現できます。特に、コード内の列挙型が変更された場合にのみ参照表が変更されることがわかっている場合は、これが多く行われます。 – Josh

0

リポジトリレイヤーの上にあるApplicationServiceレイヤーを使用することをお勧めします。次に、ApplicationServiceクラス(このクラスの適切な名前を考えてください)で、リポジトリレイヤから返されたデータをPOCOオブジェクトの適切な列挙型の値に変換できます。

0

あなたはstrongly typed datasetを使用してみてください。

+0

これはenumでどのように役立ちますか? –

+0

この構造体を使用して、列データ型の1つをカスタム列挙型の型に変更または追加できます。限り、それを埋める数値のdb値が列挙型の範囲内にある限り、私はそれが動作すると信じています。これには、部分クラスを追加するか、生成されたクラスを変更する必要があります。 – James

+0

これがうまくいくと仮定しても、その列で有効なものの定義が複数あるので、保守上の問題です。また、私は、ADO.NETが暗黙的にあなたがコードで行うことができなかったキャストを実行することに気づくでしょう:MyEnum e = 1;コンパイルされません。 –

0

技術的にはできません。 Enumは静的型で、コンパイル時にすべての値を知っているときに使用するように設計されています。いくつかの回避策がありますが、私はあなたがこれをしないことを強くお勧めします。
変更不可能なデータセットを見ると、Enumの利点の大部分が得られ、オンザフライで作成できます。

データが列挙として格納することができないが、それらは限りデータベースの列のデータが整数型であるように空想フィルタとして使用することができます。それがあなたの後にあるならば、それは完全に異なる質問です。 MSDN pageに行き、Enumで読んでください。