读取包含大量元素C#的字符串列表

时间:2014-12-27 13:04:07

标签: c# mysql arrays foreach

我想阅读(该列表中的所有数据),但我不知道如何在C#中执行此操作

        //Create a list to store the result
        List<string>[] list = new List<string>[2];
        list[0] = new List<string>();
        list[1] = new List<string>();

        //Open connection
        if (mysql.OpenConnection() == true)
        {
            //Create Command
            MySqlCommand cmd = new MySqlCommand(query, mysql.connection);
            //Create a data reader and Execute the command
            MySqlDataReader dataReader = cmd.ExecuteReader();

            //Read the data and store them in the list
            while (dataReader.Read())
            {
                list[0].Add(dataReader["filename"] + "");
                list[1].Add(dataReader["hash"] + "");
            }

            //close Data Reader
            dataReader.Close();

            //close Connection
            mysql.CloseConnection();

            //return list to be displayed
            return list;
        }

如果有人可以告诉它可以从该mysql选择中创建数组,例如2 index {“filename”,“hash”}。在PHP中我只能做$ array [“filename”] = FILENAME;等

我想在foreach循环中将该数据读作dataReader["filename"]

3 个答案:

答案 0 :(得分:2)

您可以创建单个集合,例如创建单个集合,而不是创建多个列表并尝试按索引同步数组。 List<Tuple<string, string>>List<SomeEntity>来模拟行的所有字段,其中SomeEntity是一个简单的POCO类,用于对查询中的一行数据进行建模。

e.g。创建一个新的POCO类来为行建模:

public class FileNameHash 
{
   public string FileName {get; set;}
   public string Hash {get; set;}
   // Other fields in your query here
}

...并修改您的提取代码

//Create a list to store the result
var list = new List<FileNameHash>();

using (var mysql = new MySqlConnection(connectionString))
using (var cmd = new MySqlCommand(query, mysql.connection))
using (var dataReader = cmd.ExecuteReader())
{
   if (mysql.OpenConnection() == true)
   {
      //Read the data and store them in the list
      while (dataReader.Read())
      {
          list.Add(new FileNameHash
          {
            FileName = (string)dataReader["filename"],
            Hash = (string)dataReader["hash"]
            // .. Other fields here
          });
      }
      return list;
    }
}

其他:

  • 通过将IDisposable ConnectionCommandDataReader包裹在一个使用中,可以避免忘记关闭/处置所有路径中的资源,包括异常。
  • 向对象添加一个空字符串以转换为字符串并不是一个好主意IMO - 明确地执行转换。

答案 1 :(得分:0)

我不确定我是否接受了您的问题,但我认为您非常接近:您可以使用以下方式预告您的文件名:

foreach(string filename in list[0])

你可以使用:

迭代你的哈希值
foreach(string hash in list[1])

您可以通过不将这两个列表放在数组中来简化代码,即只使用:

List<string> filenames = new List<string>();
List<string> hashes = new List<string>();

答案 2 :(得分:0)

首先创建模型类:

Public class FileAndHashCode
{
    public string name {get;set}
    public string hashCode{get;set}
}

然后创建一个方法:

Public List<FileAndHashCode> getFileAndhashcode()
   {
       \\...
       List<FileAndHashCode> temp=new List<FileAndHashCode>();
       while (dataReader.Read()) 
       { 
           temp.add(new 
            FileAndHashCode{name=dataReader["fileName"].ToString()+" " , hashCode=dataReader["hash"].ToString()+" "});
       }
       return temp;
    }