DataReader.Read() 返回空
DataReader.Read() returning empty
我基本上有一个生成项目列表(第 1 列)及其描述(第 2 列)的查询。有 3 个不同的项目(共 170 个)没有描述,所以我硬编码我的程序以针对这 3 个项目进行调整。但是,每当我的 reader 到达第一个具有空列的项目时,reader 甚至无法读取该项目。相反,它说 "Enumeration Yielded No Results"
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] as string; 处被捕获; (不为空的字段)
您应该将 (string)reader[1]
换成 Convert.ToString(reader[1])
。它包含一个 DBNull
值,而不是 null
,并且转换为 string
是导致错误的原因。 Convert
class 可以更好地处理转换:
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)));
}
我基本上有一个生成项目列表(第 1 列)及其描述(第 2 列)的查询。有 3 个不同的项目(共 170 个)没有描述,所以我硬编码我的程序以针对这 3 个项目进行调整。但是,每当我的 reader 到达第一个具有空列的项目时,reader 甚至无法读取该项目。相反,它说 "Enumeration Yielded No Results"
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] as string; 处被捕获; (不为空的字段)
您应该将 (string)reader[1]
换成 Convert.ToString(reader[1])
。它包含一个 DBNull
值,而不是 null
,并且转换为 string
是导致错误的原因。 Convert
class 可以更好地处理转换:
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)));
}