我基本上有一个查询,可以生成项目列表(第1列)及其描述(第2列)。有3个不同的项目(170个)没有描述,所以我硬编码我的程序来调整这3个项目。但是,每当我的读者到达具有空列的第一个项目时,读者甚至无法读取该项目。相反,它说"枚举没有结果"
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 :(得分:1)
您应该将(string)reader[1]
换成Convert.ToString(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)));
}