DataReader.Read()返回空
问题描述:
我基本上具有生成的项目的列表(列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]作为字符串; (该字段不为空)
答
您应该用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)));
}
当您提出问题时,请特别注意代码格式。你的大部分代码都是缩进数英里,使得阅读起来更加困难。在发布之前,请务必阅读您要发布的内容,并问问自己是否按照您想要阅读的方式格式化,如果您尝试回答。 –
感谢,将牢记 –
“枚举没有结果”听起来像一个调试器的消息。当你真正运行代码时会发生什么? –