2017-04-13 21 views
0

私はプログラミングにかなり新しいので、やさしくしてください。私は、GUID = order.SelectOpponentID(のorderID)として暗いopponentIDは以下 System.InvalidCastException:Guidを選択しようとしたときに、指定されたキャストが無効です

..私はそれを呼び出すのはここだopponentID にtblOrdersで一意識別子である「対戦相手」の値を格納する

をさしようとしています私が試みたコードが、私はSystem.InvalidCastExceptionを取得します:指定されたキャストが有効ではありません。誰も私のためにこれを調整してくださいすることができた場合、私はとても感謝される...

VBコード

Public Function SelectOpponentID(ByVal orderID As Guid) 
    Dim DBConnect As New DBConn 
    Using db As DbConnection = DBConnect.Conn("DBConnectionString") 
     Dim cmd As SqlCommand = DBConnect.Command(db, "SelectOpponentID") 

     cmd.Parameters.Add(New SqlParameter("orderID", SqlDbType.UniqueIdentifier, ParameterDirection.Input)).Value = orderID 

     db.Open() 
     Dim DR As SqlDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection) 
     Dim opponentID As Guid 
     While DR.Read 
      opponentID = DR("opponent") 
     End While 
     DR.Close() 
     DR = Nothing 
     cmd.Dispose() 
     cmd = Nothing 
     db.Dispose() 
     db.Close() 
    End Using 
End Function 

SQLコード

ALTER PROCEDURE [dbo].[SelectOpponentID] 
@orderID  uniqueidentifier 
AS 
BEGIN 
    SET NOCOUNT ON; 

    SELECT opponent 
    FROM tblOrders 
    WHERE orderID = @orderID 
END 
+0

がNULL可能で、それですカラム?また、 'OrderID'の代わりに' New SqlParameter( "@ orderID ...'を使用してください。 –

+0

これは解決しませんでしたが、あなたが言ったようにデータがnullだったというエラーをスローしました。 – Eggybread

+0

サイドノートと同様に、テーブルのキー列としてGUIDを使用することは賢明ではありません。その列のインデックスは断片化されている可能性があります。クエリのパフォーマンスが悪い –

答えて

1

このお試しください:

opponentID = DR.GetGuid(DR.GetOrdinal("opponent")) 
+0

これは解決しませんでしたが、データがnullであったため、データを修正したので、今すぐにソートされました。 – Eggybread

関連する問題