trapemiyaの日記

hatenablogが新しくなったんで新規一転また2019年1月からちょこちょこ書いてます。C#中心のプログラミングに関するお話です。

hierarchyid型をTableAdapterでFillするとこけるクライアントがある。

Click Onceでアプリケーションの配布をテスト的に行ったのですが、アプリケーションがこけるクライアントと正常に動作するクライアントがありました。
なんで〜と思って調べたところ、どうもTableAdapterのFillで例外を発している。正常に動作するマシンは基本的に開発用マシンであり、こけるマシンは基本的にそうではない。開発マシンの中にもこけるマシンがあるが、少し古いマシンである。
う〜、謎。と思い、調査してたのですが、TableAdapterでFillするテーブルにはhierarchyid型が含まれている。実に怪しい。
hierarchyid型はTableAdapterのデーターテーブルではstring型として扱われる。この変換に失敗して例外が出ているのではないか?試しに、

select 'hoge' as ヒエラルキー型の列, ・・・・・ from テーブルね

としたら、こけなくなった。やはり、hierarchyid型、おまえが犯人だったかっ!

というわけで、こいつを扱うためのモジュールが何か足らないということに目星が付いた。で、正常に動くマシンにインストールされているアプリケーションの一覧を見ていくと、「SQL Server CLR システム型」という何とも怪しげなモジュールを発見!
こいつを探したら、以下からインストールすることができるようだ。

Microsoft SQL Server 2008 用 Feature Pack、2009 年 4 月
http://www.microsoft.com/downloads/details.aspx?FamilyID=b33d2c78-1059-4ce2-b80d-2343c099bcb4&DisplayLang=ja

このページに、

Microsoft SQL Server システム CLR
SQL Server システム CLR 型パッケージには、SQL Server 2008 の新しい geometry 型、geography 型、および hierarchyid 型を実装するコンポーネントが含まれています。このコンポーネントは、サーバーから個別にインストールでき、クライアント アプリケーションではこれらの型をサーバーの外部で使用できます。

とある。間違いないだろう。

と、思いながらインストールしたら、無事に動くようになりました。