2016-12-15 65 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