2015-05-19 118 views
2

我有我想從數據庫填充列表一個簡單的類:填充列表 - System.InvalidCastException

class Foreman 
{ 
    public int ForeBadge { get; set; } 
    public string ForeName { get; set; } 
} 

繼承人我的方法應該返回工頭對象的列表:

static public List<Foreman> getForeman() 
    { 
     connectionString.DataSource = "server"; 
     connectionString.InitialCatalog = "db"; 
     connectionString.UserID = "tunnelld"; 
     connectionString.Password = "pw"; 

     string queryString = "SELECT * FROM [QTRAXAdmin].[vwQT_Foreman]"; 

     List<Foreman> list; 
     // Creates a SQL connection 
     using (var connection = new SqlConnection(connectionString.ToString())) 
     { 
      using (var command = new SqlCommand(queryString, connection)) 
      { 
       connection.Open(); 
       using (var reader = command.ExecuteReader()) 
       { 
        list = new List<Foreman>(); 
        while (reader.Read()) 
         list.Add(new Foreman { ForeBadge = reader.GetInt32(0), ForeName = reader.GetString(1) }); 
       } 
      } 
      connection.Close(); 
      return list; 
     } 

的方法與示數出在list.Add(new Foreman { ForeBadge = reader.GetInt32(0), ForeName = reader.GetString(1) });

:「」類型的未處理的異常出現在system.data.dll

對我來說,它看起來像我使用正確的變量類型。我究竟做錯了什麼?

+0

哪些列vwQT_Foreman了?看起來結果中的第一列不是int – vmg

+0

@Vitaliy,你說得對。出於某種原因,視圖將主鍵作爲varchar返回...... –

+0

什麼是列的數據類型 - 更好地使用它們的名稱而不是索引 – Cadburry

回答

4

嘗試在查詢中明確使用字段名稱,以確保列以您認爲的順序回來。這是我看到的最可疑的事情。或者,您可以在您的使用塊中使用列名稱。當然,請仔細檢查數據庫中的列定義。

0

假設表列名forebadge和用的名字,替換:

string queryString = "SELECT * FROM [QTRAXAdmin].[vwQT_Foreman]"; 

有:

string queryString = "SELECT FOREBADGE, FORENAME FROM [QTRAXAdmin].[vwQT_Foreman]";