2

SQL Server データベースからフェッチされた DataRow から、C# で SqlHierarchyID データ型を取得しようとしています。データベース呼び出しの後、次のように書くと:

var id = datarow["TreeID"];

次に、Visual Studio でウォッチを使用して id の値を調べます。正しい階層値を保持しています (null ではありません)。

ただし、次のすべては InvalidCastException をスローします。

SqlHierarchyId id2 = (SqlHierarchyId) id;
SqlHierarchyId id3 = datarow.Field<SqlHierarchyId>("TreeID");
SqlHierarchyId id4 = (SqlHierarchyId)datarow["TreeID"];

さらに、2 つのオブジェクトの割り当て能力についてリフレクションを求めます。

//returns false:
SqlHierarchyId id5 = new SqlHierarchyId();
return id5.GetType().IsAssignableFrom(id.GetType());

さらに、「ソフト キャスト」を試みると null が返されます。

SqlHierarchyId id6 = id as SqlHierarchyId;
  • すべてを SqlHierarchyId として試していますか? データ型は無駄です。
  • 私は 32 ビット アセンブリを参照しており、ソリューションを 64 ビット モードと 32 ビット モードの両方でコンパイルしようとしました。
  • 空の SqlHierarchyId インスタンスを初期化してから割り当てても役に立ちません。

助けてくれてありがとう!

-JT

編集:アセンブリは、SQL Server Express 2012 (x86) SDK ディレクトリから取得されます。

4

2 に答える 2

1

使ってみてはどうですか

//convert the string back into a hierarchyid
oRow["NodeKey"] = SqlHierarchyId.Parse((string)oRow["NodeString"]);

また、ツリーで作業していることもわかりました。このコード プロジェクトの記事が役に立ちますように。

于 2013-03-12T01:59:45.333 に答える