如何使用数据读取器读取字符串值并将其存储到数组中

3

我正在读取一些值的列表,但不确定我哪里出了错,我不知道数组的大小,所以无法为其分配任何值。

string[] result = null;
while (reader.Read())
{
    result = Convert.ToString[](reader["RoleID"]);
}
reader.Close();

我得到的是:语法错误;需要值
在获取结果值后,我该如何将结果中的值与字符串进行比较?例如,我想检查字符串 check="Can send message"; 是否存在于结果数组中。我该怎么做?

你没有提供足够的信息让别人给出实际的答案。首先,你的语法是错误的,你正在遍历读取器,试图将每个值转换为结果数组?根据你想要实现的目标,可能有更好的方法来完成这个任务。 - Random
4个回答

3

您的代码在语法上出现了错误,这也是导致错误的原因。但是当您需要构建一个项目集合但又事先不知道其大小时,您应该使用 List<T> 而不是数组。列表将允许您继续添加项目。

var results = new List<string>();
while (reader.Read())
{
    results.Add(reader["RoleID"].ToString());
}

// results now holds all of the RoleID values in the reader 

你可以通过索引访问列表中的元素,就像访问数组一样,并且如果需要,可以使用Linq查询列表(也像数组一样)。
string check = "something";
if (results.Any(item => item.Equals(check)))
{
    // results contains the value in check 
}

// or use all items that equal check
foreach (var item in results.Where(obj => obj.Equals(check))
{
    // do something with each item that equals check
}

如何将其与字符串进行比较,我想将结果与字符串check="Something"进行比较。 - John
答案已更新,展示了使用Linq的各种查询技术。(相同类型的逻辑也可以通过显式循环执行。) - Anthony Pegram

1

我更喜欢使用 ArrayList

var result= new ArrayList();
while (reader.Read())
        {
            result.Add(Convert.ToString[](reader["RoleID"]));
        }reader.Close();

如果没有与.NET 1.x / C# 1.x绑定,使用ArrayList的理由非常少。在.NET / C# 2.0或更高版本中,建议使用List<T> - Anthony Pegram
我必须在这件事上支持@huMpty duMpty。尽管它可能不是最佳选择,但对于初学者来说使用ArrayList肯定更容易。 - Josh Campbell

0
你应该使用以下的列表:
var results = new List<string>();
while( reader.Read() ){
    results.Add(reader["RoleID"].ToString());
}

然后您将遍历集合中的所有字符串,并使用foreach语句检查它们:

foreach(var result in results) {
    if(result == "check") {
        // do something
    }
}

0
Anthony Pegram的示例中的列表如果需要可以轻松转换为数组。
string[] result = results.ToArray();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接