WebSurfer's Home

トップ > Blog 1   |   ログイン
APMLフィルター

型付 DataSet の名前に注意

by WebSurfer 2018年4月9日 14:33

Visual Stidio のデータソース構成ウィザードを使って型付 DataSet を生成するとき、その名前を DataSet とすると、System.Data.DataSet と名前が衝突して問題を起こすので要注意という話を書きます。

型付 DataSet の作成

上の画像は、ウィザードで型付 DataSet(.xsd ファイル)を生成しようとしているところですが、ファイル名がデフォルトで DataSet.xsd となるのが諸悪の根源(?)です。

デフォルトの名前が DataSet.xsd のなるのは、自分が調べた限りでは、Visual Studio Cummunity 2015 で、ASP.NET Web Forms アプリケーションを Web サイトプロジェクトとして作り、その App_Code フォルダに .xsd ファイルを生成する場合だけでした。(それ以外ではデフォルトの名前は DataSet1.xsd となります)

なので余計に気づき難いと思います。もちろんコンパイルエラーは出ませんし。

具体的にどういうことになるかと言うと、以下の通りです。

ファイル名を DataSet.xsd とすると、それから生成される型付 DataSet の名前も以下の通り DataSet となります。

/// <summary>
///Represents a strongly typed in-memory cache of data.
///</summary>
 [global::System.Serializable()]
// ・・・中略・・・
public partial class DataSet : global::System.Data.DataSet {
        
    private ProductsDataTable tableProducts;

    // ・・・中略・・・
}

そうなると、単に DataSet と宣言しただけでは型付 DataSet に定義された DataSet と見なされます。using 句に System.Data を設定しても同じです。

下の画像を見てください。上の型付 DataSet のコードの summary に設定された "Represents a strongly typed in-memory cache of data." がインテリセンスで表示されています。

インテリセンスの表示

この状態で System.Data.DataSet を使うには、上の画像の一番下の行に書いたようにしなければなりません。

自分のケースでは、上の ds を ds.ReadXml(xmlTextReader); というように使ったのですが、ds にデータを取得できない(エラーも出ない)というトラブルにハマって 1 ~ 2 時間悩みました。

今時こんなトラブルにハマるのは自分だけかもしれませんが、一応備忘録として残しておくことにします。(笑)

Tags:

.NET Framework

About this blog

2010年5月にこのブログを立ち上げました。主に ASP.NET Web アプリ関係の記事です。

Calendar

<<  2018年4月  >>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

View posts in large calendar