2016-02-04 98 views
0

它指向的爲什麼我得到「指定的演員表無效」?

while (dataReader.Read()) 
    { 
     Partners.Add(new Partner { 
      Id = dataReader.GetGuid(0), 
      Name = dataReader.GetString(1), 
      Email = dataReader.GetString(2), 
      Finished = dataReader.GetInt32(3) == 1 
     }); 
    } 
} 

Id = dataReader.GetGuid(0),我驗證過IddataReader.GetGuid(0)的類型Guid的,如果你能相信這一點。

IdGuid型的,因爲它是從

public class Partner 
{ 
    public Guid Id { get; set; } 
    public string Name { get; set; } 
    public string Email { get; set; } 
    public bool Finished { get; set; } 
} 

dataReader.GetGuid(0)一個字段是Guid類型的,因爲當我做

public class Partner 
{ 
    //public Guid Id { get; set; } 
    public string Id { get; set; } 
    public string Name { get; set; } 
    public string Email { get; set; } 
    public bool Finished { get; set; } 
} 

Id = dataReader.GetString(0) 

我得到的錯誤

無法投類型的對象的System.Guid爲鍵入 'System.String'

是沒有意義的!

編輯:它看起來我得到我們的價值觀,當我鍵入含蓄:

enter image description here

+1

你在遊標中有* null * s嗎?什麼'dataReader.GetValue(0).GetType()'返回? –

+0

可能的方式:'Id = new Guid(Convert.ToString(dataReader.GetValue(0)))' –

+0

'dataReader'的0列數據可能無法轉換爲'Guid'。看到http://stackoverflow.com/questions/27699781/specified-cast-is-not-valid –

回答

0

dataReader.GetString(0)返回String,它不會隱式轉換你的GuidString,因此您InvalidCastException

嘗試:

Id = dataReader.GetGuid(0).ToString() 

此外,嘗試通過使用String索引,不integer索引得到的值:

Id = dataReader.GetGuid("Id"), 
Name = dataReader.GetString("Name"), 
Email = dataReader.GetString("Email"), 
Finished = dataReader.GetInt32("Finished") == 1 

,否則添加列的結果會破壞你的代碼。

更好的是,嘗試使用EntityFramework來爲你做所有的映射。

+0

我試圖做到這一點的最老式的方法可能 – user5648283

+0

我沒有看到一個'GetGuid(串)'方法在這裏https://msdn.microsoft.com/en-us/library/System.Data.SqlClient.SqlDataReader(v=vs.110).aspx .... – user5648283

+0

我已經找到它[這裏](https:/ /msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.getguid(v=vs.110).aspx)。 – Alexei

0

這是你的答案。如果你想在合作伙伴級使用Guid類型爲ID,當你閱讀從SQL Server的數據,轉換從服務器返回Guid類型的字符串數據類型,如下

while (dataReader.Read()) 
{ 
    Partners.Add(new Partner { 
    Id = Guid.Parse(dataReader.GetString(0)), 
    Name = dataReader.GetString(1), 
    Email = dataReader.GetString(2), 
    Finished = dataReader.GetInt32(3) == 1 }); 
} 

但是你的伴侶類將有Id類型Guid如下

public class Partner 
{ 
    public Guid Id { get; set; } 
    public string Name { get; set; } 
    public string Email { get; set; } 
    public bool Finished { get; set; } 
} 
+0

我最終不得不用一個可空的guid來做到這一點; uRow.UserRoleId = oRow [「UserRoleId」]爲Guid? –