「Visual Studio」カテゴリーアーカイブ

C#, T-SQL : T-SQLのFLOAT型フィールドに.NETのDouble.NaN(非数)の値を入れることはできません。

たとえば、

double a = double.NaN;
SqlParameter p = new SqlParameter("@value", SqlDbType.Float);
Param.Value = a;
cmd.Parameters.Add(p);
cmd.ExecuteNonQuery();

このようなコードがあったときに、cmd.ExecuteNonQuery(); で型変換ができないと System.Data.SqlClient.SqlException になります。

代替案としては、挿入する実数値がNaNだった場合には(可能であれば) Null (DbNull) を挿入するか、最大値、最小値を使うなどアプリケーションやプロジェクト後に対応を決める必要があります。

同様に正負無限大値(PositiveInfinity, NegativeInfinity)の値もFLOATのフィールドに入れることができません。

プログラミングF#著者が来日されてトークイベントがあるようです

荒井さんのBlogにて、「プログラミングF#」の書評を書かれていたのですが、その中で。

プログラミング F# が発売されました – 荒井省三のBlog – Site Home – MSDN Blogs

この書籍の発売を記念して、著者であるChris Smith氏のトークイベントが行われます。先着20名限定でサインをしていただけるそうです。もし、行かれる場合は予約をされることをお勧めします。

Σ(゚Д゚;エーッ!

聞いてないよ。。。(誰がおまえにわざわざ連絡するw)

日時場所は

日時:2010年9月22日(水) 開場18:30/開演19:00~
場所:書泉ブックタワー 9階イベントフロア
入場料:無料/入場順に前からのご着席になりますのでご了承ください

だそうです。

詳細は以下のオライリーのページにてご確認ください。

http://www.oreilly.co.jp/editors/archives/2010/08/ann-programming-f-sharp-talkevent-2010-sept.html

まっ所詮デスマ中の漏れには。。。

C# : Entity Framework(.NET Fx 3.5) Linq式を使わない

こういう書き方をしていると普通にLinq式を書くのが面倒になってきます。

C# : Entity Framework(.NET Fx 3.5) 簡単なまとめの追加 ビューから渡されたEntity Objectをそのまま使った更新

例のごとくこのようなデータ構造になっています。

image

MVPパターンを使っている場合に、ビューで更新されたエンティティオブジェクトをプレゼンターに渡し、プレゼンターではその渡されたものをそのまま使ってデータベースを更新したいときがあります。(あるんです。)

まずはビュー側でエンティティオブジェクトを作り、更新データを整えたらプレゼンターの更新用メソッドを呼び出します。

<

div class=”csharpcode”>

プレゼンター側では引数で渡されたエンティティオブジェクトを使って更新します。ここでの更新方法についてはMSDNマガジン2008年7月号の階層型アーキテクチャの Entity Frameworkに書かれている方法そのままです。

まず4行目で引数で渡されたエンティティをコンテキストにアタッチします。

5行目から9行目ですが、ビューで更新されるプロパティが特定できる場合には、コメント内にあるようなやり方でそのプロパティだけ更新済みにするやり方もあります。

11行目はMSDNマガジンに書かれているやり方で、拡張メソッドを使ってエンティティの持つ全てのプロパティを更新済みとしてしまう方法です。ビューでグリッドコントロールにバインドされている場合などどのプロパティが更新されているかわからない場合に箱の方法が良いと思います。(バインディング使えるならこんな事しなくて良いのかアハハハハ)

拡張メソッド:

全体コードは次のようになります。

続きを読む C# : Entity Framework(.NET Fx 3.5) 簡単なまとめの追加 ビューから渡されたEntity Objectをそのまま使った更新

Linq to XSDを楽しむ

TwitterでufcppさんにLinq to XSDの存在を思い出させていただいたので、現状どんなんだか触ってみた。前に触ったときにはかなりぁゃしぃ感じだった記憶があるのですが、何か今はちゃんとしてます。

まず、ダウンロード。

ダウンロードのページからバイナリをダウンロードします。私はVisual Studio 2010で確認したかったので2.0.0をダウンロード。

http://linqtoxsd.codeplex.com/releases/view/41260

ただし、このバイナリだけダウンロードしてもよっぽど何かできる人じゃないと何をしていいかもわからないので、ソースファイルも落とします。

http://linqtoxsd.codeplex.com/SourceControl/list/changesets

私はとりあえず最新のBuild 49966を落としました。普通はバイナリーのバージョンと同じソースを落とした方がいいとは思いますが・・・

展開

落としてきたバイナリのZIPとソースZIPそれぞれを回答して保存します。特にバイナリは後で環境変数にそのパスを登録する必要があるので、それを意識して回答、保存してください。私は「C:\bin\LinqToXsd2」と言うフォルダに保存しました。

設定

まず回答したソースのtrunkフォルダにあるReadme.TXTを開きます。この中の「Visual Studio integration」の内容を確認します。ちなみにReadme.txtはUTF-8エンコーディングです。

Set up the environment variable LinqToXsdBinDir (e.g. c:\LinqToXSDBin) before opening any Visual Studio instance.
Import LinqToXsd.targets template into your C# project by adding following lines into your project file (i.e. yourproject.csproj)
        <PropertyGroup>
        <LinqToXsdBinDir Condition="’$(LinqToXsdBinDir)’ == ”">$(SolutionDir)</LinqToXsdBinDir>
    </PropertyGroup>
    <Import Project="$(LinqToXsdBinDir)\LinqToXsd.targets" />

    o You can use your favorite XML editor (e.g. notepad) to edit .csproj files,
    o Make sure that your <Import Project="$(LinqToXsdBinDir)\LinqToXsd.targets" /> line is
           after any other Imports (e.g.   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />)
    o You can take a look at samples to see how it is done.

Open your project in Visual Studio
Add your XSD schemas to the project (i.e. right click on project->Add->Existing Item)
Change "Build Action" to LinqToXSDSchema on your XSD schemas
Build your project, after your first build XSD namespaces and types will be available in intellisense.
To see how you can integrate LINQ to XSD in your VB project please see LinqToXsdVB sample.

まずは、環境変数LinqToXsdBinDirに先ほどバイナリを解答したフォルダを設定します。

次に、まだVisual Studioへこれを組み込みインストーラー等が用意されていないので、.csprojファイルを直接編集して、プロジェクトに関連づける必要があります。変更内容は上の記述やReadMe.TXTの内容を確認してください。

一応これで、該当プロジェクトでLinq to XSDが使える様になりました。

使い方

.\trunk\docs\alpha.0.2にあるLinqToXsdOverview.docをご覧になって、中のチュートリアル通りに実行してみるのがいいでしょう。

完成形はこのようなコードになります。

image

肝はここで、プロジェクトに対象となるXMLのW3Cスキーマ(XSD)を追加し、そのプロパティのビルドアクションプロパティでこのように設定することで、ビルド時にXSDにあわせたクラスをジェネレートします。また、それらのクラスのネームスペースはXSDのネームスペースを引き継ぎます。(上のコードでのwww.example.com.Ordersが相当。)

また、LinqToXsdOverview.docの注意点ですが、当然のことながら新規プロジェクトの一覧には14ページにある様なLinq to XSDのセクションやそれ用のプロジェクトテンプレートなんてありませんから、中のチュートリアルを実行するためには、コンソールアプリケーションのプロジェクトを一度作って、先ほど書いた要領でそのプロジェクトファイルを修正した後でチュートリアルの内容を進めてください。

結論

素人にはお勧めしない。

がんばって製品化しようとしているところは見受けられますが、まだインストーラーすらないので一般プロジェクトに使うのには無理があります。ただコードとしての完成度はそれなりだと思いますので自分で.csprojファイルの書き換えが苦にならない人はツール作成等から使い始めてみるのがよいのではないでしょうか。

結構良いので、VS2010 SP1あたりには製品にれてくれるとうれしいかなと。

後、関係ないですが、今更VS10でXSDのエディタがVS2008での放置プレイから少しまともになったかなと言う気がします。とか言いながら自分はGUIツールあまり使わないんですけどね。

参照

<

p>LINQ to XSD – CodeProject

JimmyがMSを辞めてしまいました。

jimmy.thinking: “Start spreading the news”: the future of Jimmy and IronRuby

Though Frank Sinatra says it best, “I’m leaving today” isn’t exactly accurate; my last day as a Microsoft employee was July 23rd, 2010. This post is almost two weeks delayed as Felicia and I have been on the road since the 26th, driving cross-country to the east coast; we also decided to leave Seattle in favor of New York, our home state.

今までIronRubyチームを率いてきていて、IronRubyの顔でもあったJimmy Schementi氏がMSを辞めてしまったようです。

Blogの中ではMS内で動的言語チームの予算と規模が縮小されている話や、それにより諸々のリリースが遅れていること、この前のライセンス変更もそうした中でDLRやIronRuby、IronPythonを継続させていくために執った処置であることが書かれており、かなり衝撃的です。そして、その代わりに今愛が注がれているのがIE9のJavaScript Engineだとも。

Jimmy自身はMSを辞めNYで職を得たようです。また、社外には出るが、IronRubyのコミッティには残ってCoreに関わるとのことなので、今後の活躍に期待したいです。

C# : Entity Framework(.NET Fx 3.5)簡単なまとめの追加 リレーションシップの更新

例のごとくこのようなデータ構造になっているとします。

SQLのテーブル:

image

Entity Frameworkのモデル

image

ProjectテーブルとShipテーブルにはリレーションが設定されています。

リレーションシップの変更

リレーションの変更を行いたい場合があります。たとえば上の例だとProjectでは船の所属を管理し、Shipでは船を管理しているのですが、船の所属を変えたい場合、普通にSQLで考えるとShipテーブルのprojectIdを変更すればいいだけですが、.NET Fx 3.5のEntity Frameworkではかなりやっかいです。

Entity Frameworkのモデルではテーブル間じゃないオブジェクト間のリレーションは、オブジェクト指向的な解釈で解決されているので、かなりやっかいです。もうこの辺を詳細に見出すとEntity Frameworkがいかに宇宙飛行士用のFrameworkであるか実感できます。

愚痴はともかく実際のコードです。

 

大事なのは25行目から31行目です。

まずリレーションを変更したいShipオブジェクト(ship2)とそれた新たにリレーションを持たせたいProjectオブジェクト(project4)をコンテキストから取得します。(25行から27行)

次に取得したShipオブジェクトのProjectへのリファレンスであるProjectReferrence(EntityReference<T>)のEntityKeyプロパティに、コンテキストのCreateEntityKeyメソッドでリレーション先のKeyを作り挿入します。(29行)

コンテキストの SaveChange メソッドで、この変更をデータベースに反映します。(31行)

コード自体はシンプルですが、SQLえいえいっとやることに比べるとかなり回りくどいというか、きわめてOOP的で、SQLでのデータ操作に慣れているとかなり直感的でないです。だいたい外部キーに指定しているいるフィールドの値を書き換えるだけなのに、何で直接変更できずにこうなるんだか、もう何が何だか。

さすがに .NET 4 では改良され、外部キー指定されているフィールドを(OOP的に)直接更新できる様なので、もう少し直感的に変更できるはずです。

参考:

C# : Entity Framework(.NET Fx 3.5)についての簡単なまとめ

もういささか古い情報になってしましたが、.NET Framework 3.5 SP1のEntity Frameworkについて簡単にまとめます。

まぁ俺様用防備録。

対象となるデータの構造

説明の対象となるデータは以下のような構造を持つとします。

image

データの検索

リレーション先のデータを含めて検索(クエリー)をするにはfrom句でエンティティオブジェクトを指定するときに.Include()をつけて、検索結果に含めるリレーション先オブジェクトへのパスを指定します。

以下の例では子のShipエンティティtに対するクエリーで、関連している親のProjectエンティティのオブジェクトを含むようにLinq式で指定しています。

また、親から子方向であれば以下のようにシンプルに書くこともできる。

データの追加

親テーブルであるProjectへのデータ追加に関しては以下のようなコードになります。ADO.NETのデータセットを知っている人にとっては理解しやすいコードです。

子テーブルであるShipへのデータ追加については親テーブルとのリレーション(関係)をナビゲーションプロパティを使って定義しなければならないのでやや複雑になります。

データの更新

子テーブルであるShipへのデータ更新について見てみます。

更新対象がわかっているなら、更新対象を特定し、アタッチしたら、更新対象のプロパティを変更します。

データの削除

子テーブルのデータの削除についても、基本的には子テーブルへのデータ追加と同じでリレーションをとってアタッチしてからとなります。

接続文字列

設定ファイル記述等により動的に接続サーバーを変更する必要がある場合には、SqlConnectionStringBuilderクラスと EntityConnectionStringBuilderクラスを使用して接続文字列を生成します。(通常本運用と開発ではSQL Serverが違うし、そんな設定項目にするよね。)

MetaDataはEDMのデザイナーが生成する接続文字列から持ってきます。

image

この接続文字列を使ってエンティティコンテナがデータベースサーバにアクセするようにするには、エンティティコンテナのコンストラクタの引数にこの接続文字列を指定します。

Visual Studio LightSwitch

http://www.microsoft.com/visualstudio/en-us/lightswitch

くわしくはJasonのBlogを確認していただくとして、これが何かというと完全のノーコーディングでビジネスアプリを作っちゃおうというものです。当然ドメイン的な制約はあるわけですが、世の中のビジネスアプリケーションのほとんどが実は単票入力、集計アプリケーションである事実を考えれば、これでほとんどカバーできてしまうのかもと思う次第。

いやー何このお気楽さ。

実際に触れるものの公開はもうちょっと先みたいなので、楽しみですね。

まぁInfoPathの立場は?とか思ったりもしますけど。

先ほどのBlogからスクリーンショットをちょっとお借りして。。。

続きを読む Visual Studio LightSwitch

近々Channel 9のサイトがリニューアルするようです。

ということで、プレビューサイトがオープンしたようです。

Check out this preview of an all new Channel 9. We’re looking forward to your feedback and suggestions. If you are interested in how it was built and the decisions we made about the architecture, check out this video with Charles and Sampy.

Preview The New Channel 9 | jeffsand | Channel 9

image

なかなかいいんじゃないでしょうか。