2017-02-17 5 views
0

Visual StudioのDataSet DesignerにMSSQLデータセットをインポートしましたが、null不可能な型に問題があります。私のデータベースはnullの整数を許しています(可能であればそのままにしておきたい)が、.NETの整数はnullにはなりません。 .NETでnull可能な整数を使用するのが大好きですが、そのデータ型はDataSet DesignerのDataTypeプロパティのドロップダウンリストで許可されているオプションではないようです。DataAdapterからデータを引き出すときにDBNullを処理する方法

データ型をnull可能な整数に変更するためにスキーマを変更するたびに、手動でDataSet.Designerクラスファイルを編集する必要はありません。私は、DBNullのプロパティを参照するときにStrongTypingExceptionをスローするのではなく、Null/Nothingを返すようにします。

DataSet DesignerにNullValue列プロパティがありますが、私のデータ型がObjectでない限り、 "Return Null"を選択できません。

デザイナーの設定やニートラッパー関数を使用してDBNULL> Null変換を処理する明確な方法はありますか?私はIsColumnNameNull()関数をこれらのプロパティの1つを呼び出すたびにすべての列に使用する必要はありません。私はまた毎回オブジェクトを実際のタイプにキャストしたくないと思っていません。

私はこの問題を間違った方法で見ているかどうか教えてください。どんなフィードバックもありがとうございます。ありがとう!

+0

https://msdn.microsoft.com/en-us/library/1t3y8s4s.aspx;ネットでNullable型。 –

+1

int32.tryparseを使用して、それらを通常の整数として保持する場合は、すべてのNULL値を負の値または他のデフォルト値として扱うこともできます。 –

答えて

2

.Field<T>("ColumnName")System.Data.DataSetExtensionsアセンブリの汎用拡張メソッドを使用できます。

int? intValue = datarow.Field<int?>("CustomerId"); // c# 
Dim intValue As Integer? = datarow.Field(Of Integer?)("CustomerId") ' vb.net 

しかし、あなたは1行のデータを使用するため、一度だけ、それをインスタンス化表し正しいタイプを持つクラスを作成することができます。

DataSet,DataTableDataRowの型を取り除き、プロパティに定義された型を持つ軽い "POCO"クラスを使用します。

クラスを使用することで、将来の変更(例えば、DataSetsからいくつかのORMフレームワークへの移行、クラスの主なビジネスロジックに影響を及ぼすことなくデータアクセスを変更できるなど)に対して、

+0

専門家の視点に感謝します。これらのソリューションのいくつかを試してみます。 – EMUEVIL

関連する問題