2013-12-18 37 views
0

我試圖使用ExecuteScalar返回uniqueidentifier。然而,當我嘗試運行它,我得到這個錯誤:ExecuteScalar從'System.String'無效強制轉換爲'System.Guid'

Invalid cast from 'System.String' to 'System.Guid'. 
Exception Details: System.InvalidCastException: Invalid cast from 'System.String' to 'System.Guid'. 

我後面的代碼看起來是這樣的:

 Dim id As String = HttpContext.Current.Session("id") 
    Dim file As String = HttpContext.Current.Session("file") 
    connectionstring = ConfigurationManager.ConnectionStrings("ConnectionString1").ConnectionString.ToString 
    Dim SQLConnection As New SqlConnection(connectionstring) 
    SQLConnection.Open() 

    Dim cmd As SqlCommand = New SqlCommand("GetFile", SQLConnection) 

    Dim param1 As New SqlParameter() 
    param1.ParameterName = "@id" 
    param1.SqlDbType = SqlDbType.UniqueIdentifier 
    param1.Direction = ParameterDirection.Input 
    param1.Value = id 

    Dim param2 As New SqlParameter() 
    param2.ParameterName = "@file" 
    param2.SqlDbType = SqlDbType.UniqueIdentifier 
    param2.Direction = ParameterDirection.Input 
    param2.Value = file 

    cmd.CommandType = CommandType.StoredProcedure 
    cmd.CommandText = "GetFile" 
    cmd.Parameters.Add(param1) 
    cmd.Parameters.Add(param2) 

    cmd.ExecuteScalar() 

    If cmd.ExecuteScalar.ToString = Nothing Then 
     HttpContext.Current.Response.Redirect("Login.aspx") 
    Else 
     HttpContext.Current.Session("fileguid") = cmd.ExecuteScalar 
    End If 

存儲過程定義了這兩個參數:

@id uniqueidentifier, 
@file uniqueidentifier 

它只是使用這兩個參數來驗證它們存在於同一記錄中。 選擇語句是:

SELECT [file] FROM [dbo].[files] WHERE [cid] = @id AND [file] = @file 

希望你能幫上忙。

+0

你打電話的ExecuteScalar兩次! –

+0

我是嗎?我雖然ExecuteScalar.ToString只會使用結果? – Dan

回答

0

您的ID和文件都是字符串,使他們成爲的GUID

var idGuid = new System.Guid(id); 
var fileGuid = new System.Guid(file); 

,並將它們傳遞到存儲過程

param1.Value = idGuid; 
... 
param2.Value = fileGuid; 
相關問題