2016-12-15 63 views
0

我基本上具有生成的項目的列表(列1)和它們的描述(第2列)的查詢。有3個不同的項目(170箇中)沒有說明,所以我硬編碼我的程序來調整這3個項目。但是,只要我的讀者到達第一個具有空列的項目,閱讀器甚至無法閱讀該項目。相反,它說:「枚舉沒有結果」DataReader.Read()返回空

var reader = command.ExecuteReader(); 
while (reader.Read()) 
{ 
    var node = reader[0] as string; 
    string fullNodeName = string.Empty; 
    if (string.IsNullOrEmpty((string)reader[1])) 
    { 
     switch ((string)reader[0]) 
     { 
      case "xxx": 
       fullNodeName = "jhhfgnfh"; 
       break; 
      case "xxx": 
       fullNodeName = "fhnfgndfgdh"; 
       break; 
      case "xxx": 
       fullNodeName = "werqrqwerq"; 
       break; 
     } 
    } 
    else 
    { 
     fullNodeName = reader[1] as string; 
    } 
    _nodeTokenList.Add(new Carriers.NodeToken(node, string.Format("{0} - {1}", node, fullNodeName))); 

} 

數據看起來像

Node Description 

XXX || YYYYYYY YYY YYY 

XXX || YYYYYYY YYY YYY 

XXX || YYYYYYY YYY YYY 

XXX || YYYYYYY YYY YYY 

XXX ||     

XXX || YYYYYYY YYY YYY 

與空描述字段行是在程序啓動演戲的時候。奇怪的是,它進入該行的while循環,但異常被捕獲到var node = reader [0]作爲字符串; (該字段不爲空)

+0

當您提出問題時,請特別注意代碼格式。你的大部分代碼都是縮進數英里,使得閱讀起來更加困難。在發佈之前,請務必閱讀您要發佈的內容,並問問自己是否按照您想要閱讀的方式格式化,如果您嘗試回答。 –

+0

感謝,將牢記 –

+0

「枚舉沒有結果」聽起來像一個調試器的消息。當你真正運行代碼時會發生什麼? –

回答

1

您應該用Convert.ToString(reader[1])換出(string)reader[1]。它包含一個DBNull值,而不是null和鑄造string是什麼原因造成的錯誤。 Convert類可以更好地處理轉換:

var reader = command.ExecuteReader(); 
reader.Read(); 
while (reader.Read()) 
{ 
    var node = Convert.ToString(reader[0]); 
    string fullNodeName = string.Empty; 
    if (string.IsNullOrEmpty(Convert.ToString(reader[1]))) 
    { 
     switch ((string)reader[0]) 
     { 
      case "xxx": 
       fullNodeName = "jhhfgnfh"; 
       break; 
      case "xxx": 
       fullNodeName = "fhnfgndfgdh"; 
       break; 
      case "xxx": 
       fullNodeName = "werqrqwerq"; 
       break; 
     } 
    } 
    else 
    { 
     fullNodeName = reader[1] as string; 
    } 
    _nodeTokenList.Add(new Carriers.NodeToken(node, string.Format("{0} - {1}", node, fullNodeName))); 

} 
+0

我喜歡這個答案,但是異常被觸發2行以上,var node = reader [0] –

+0

或者只是執行'reader.IsDBNull(1)'而不是 – juharr

+0

更新後,再次使用'Convert.ToString()' 'reader [0]'的轉換。 – gmiley