2016-05-13 67 views
0

我正在從SQL表中讀取一個位值,並將其轉換爲布爾值以映射到布爾模型值。如何解決位值上的IndexOutOfRangeException?

但是,當我讀回IsPDLChecked位字段並初始化爲false時,我得到一個index out of range exception

我擡頭異常的定義,我不知道爲什麼值超出範圍,由於它是初始化用假值,即0。所以這不是一個負範圍值。

問:

爲什麼我會得到一個IndexOutOfRange exception雖然位值被讀回被轉換爲bool和init假?

代碼:

模型 -

public partial class EmailContact 
{ 
    public int ContactID { get; set; } 
    public bool IsPDLChecked { get; set; } 
    public string ContactDisplayName { get; set; } 
    public string ContactEmailAddress { get; set; } 

} 

數據讀取器片段 -

while (dataReader.Read()) 
{ 
    statusList.Add(new EmailContact(dataReader["IsPDLChecked"] as bool? ?? false,dataReader["ContactDisplayName"].ToString(), dataReader["ContactEmailAddress"].ToString())); 
} 

錯誤細節:

System.IndexOutOfRangeException被抓住
的HResult = -2146233080
消息= IsPDLChecked
源= System.Data
堆棧跟蹤:

在System.Data.ProviderBase.FieldNameLookup.GetOrdinal(字符串fieldName的)
在系統.Data.SqlClient.SqlDataReader.GetOrdinal(字符串名稱)
在System.Data.SqlClient.SqlDataReader.get_Item(字符串名稱)

DB模式:(我也注意到了 「CHARACTER_MAX_LENGTH」 列設置爲null在此):

enter image description here

DB值:(IsPDLChecked有一個值)

enter image description here

回答

1

documentation說:「指定的名稱不是有效的列名稱」時,您正在獲取IndexOutOfRangeException

你應該做的第一件事是在C#中的比賽,以確保列名稱與表中(或查詢,如果它們被重新定義):

SELECT ContactDisplayName, ContactEmailAddress, IsPDLChecked FROM table 

SELECT * FROM table 

將返回將與表中相同的列名,並且您的讀者現在應該沒問題。

但是,如果您的查詢是這樣的:

SELECT ContractDisplayName as Name, 
     ContactEmailAddress as Email, 
     IsPDLChecked as Checked 
    FROM table 

你需要在C#中讀取結果是這樣的:

dataReader["Name"] 
dataReader["Email"] 
dataReader["Checked"] 
相關問題