2017-04-13 63 views
0

我對編程相當陌生,請保持溫和。我想將「對手」,這是一個唯一標識符tblOrders到opponentID 的價值此處,我把它叫做..System.InvalidCastException:嘗試選擇Guid時指定的強制轉換無效

昏暗opponentID作爲的Guid = order.SelectOpponentID(單編號)

下面是我嘗試過的代碼,但我得到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

它是一個可空柱?此外,使用'新SqlParameter(「@ orderID ...'而不是'orderID'。 –

+0

這並沒有解決它,但它確實會拋出一個錯誤,說你的數據是空的,所以我修復了數據,現在我已經排序了,謝謝你,我也錯過了一個'返回' – Eggybread

+0

正如一個側面提示,使用guid作爲表中的關鍵列是一個糟糕的選擇,該列上的任何索引都可能變成碎片並且會有可憐的查詢性能 –

回答

1

試試這個:

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

這並沒有解決它,但它確實拋出一個錯誤,說數據是空的,所以我修復了數據,現在我已經排序謝謝你,我也錯過了一個'返回'。 – Eggybread

相關問題