2012-04-03 1 views
1

タイプuniqueidentifierのカラムを選択し、ASP.netのタイプGuidの変数に入れることに問題があります。SQL Server 2008のuniqueidentifierを選択し、それを.net Guid変数に入れる方法は?

データベースではuniqueidentifierが生成されています。外部キーテーブルを作成する必要がある場合に備えて、値を取り出して保存するだけです。

私は価値保存するためにプライベートメンバを使用しています:テーブルから

Private _uniqueID as guid 

I SELECTをしてvRdr呼ばれるSqlDataReaderを使用しています。他のすべての値がうまく出てきているが、私はこれを追加したとき、私はエラーを取得:

if not isDBNull(vRdr("uniqueID")) then 
    _uniqueID = vRdr.GetGuid("uniqueID") 
end if 

私が手にエラーは、私はなぜ私はそんなにトラブルを抱えていますかわからない

Input string was not in a correct format.

ですこれらの値を選択しようとしています。私はまた、運のないデータリーダーの値にGuid.Parse()Guid.TryParse()を試しました。

読んでいただきありがとうございます。

答えて

3

the MSDN docsによれば、GetGuid()は文字列キーではなく列序数をとります。コードを次のように変更してください。

_uniqueID = vRdr.GetGuid(vRdr.GetOrdinal("uniqueID")) 
+1

恐ろしいことに、これはRTFMをはるかに上回ってはいけません。ありがとう、これは動作します。 – rg89

+0

これは私のためには機能しません。 – cja

+0

あなたのコードとエラーを新しい質問として投稿してください。問題の解決方法を見てみましょう。 – mgnoonan

1

データベースの値から新しいGuidを作成しようとしましたか?

例:

_uniqueID = New Guid(vRdr("uniqueID").ToString()) 
+0

私は新しいGuid( ""&vRdr( "uniqueID"))を試していましたが、.ToString()は試していませんでした。あなたのコードは動作しますが、別の正解が最初です。私は両方をチェックできるとは思わない。 – rg89

+0

私はmgnoonanの答えがよりよい解決であることに同意します。喜んで:) – Khan

0

あなたは(結果セットのXレコードの)ループ内でGetOrdinal()を呼び出している場合、これは非常に高価なことができます。 GetOrdinal()の値を一度保存​​して再利用したいと思うでしょう。

IDataReader[]演算子を使用し、指定した列の文字列識別子をインデックスに使用できます。これはobjectを返しますが、単にGuidにキャストします。文字列によるインデックス作成では、少なくともSqlDataReaderでGetOrdinalも呼び出されることに注意してください。

Guid myGuid = (Guid)vRdr["uniqueID"]; 
0

多くの場合、多くの手順が.netフレームワークの多くのバージョンで機能します。以下は、実際にVisual Studioの私のために働いた2つのソリューションである2012年

  1. のViewState( "のGuid変数")=( "GUID値を")
  2. 薄暗いmyGuid GUIDなど myGuid =( "GUID値")

第1の解決策は、ページポストバック後の可変データを保持し、第2の解決策は可変データを保持しない。楽しい!

関連する問題