C# list<string> in a list<string>[] .toList()

C# list<string> in a list<string>[] .toList()

我目前正在学习如何使用数据库连接以及如何读写数据。我正在为 visual studio 使用 Mysql data/connector 6.1。这支持访问本地主机 mysql 服务器。

我想显示我使用此代码登录的人的个人信息:

string query = "SELECT * FROM gebruiker WHERE id='" + id + "'";

List<string>[] list = new List<string>[5];
list[0] = new List<string>();
list[1] = new List<string>();
list[2] = new List<string>();
list[3] = new List<string>();
list[4] = new List<string>();


if (this.openConnection() == true)
{

    MySqlCommand cmd = new MySqlCommand(query, connection);
    //Een nieuw datareader object maken en dan query uitvoeren
    MySqlDataReader dataReader = cmd.ExecuteReader();


    while (dataReader.Read())
    {
        list[0].Add(dataReader["id"].ToString());
        list[1].Add(dataReader["voornaam"].ToString());
        list[2].Add(dataReader["achternaam"].ToString());
        list[3].Add(dataReader["geboortedatum"].ToString());
        list[4].Add(dataReader["Rol_id"].ToString());
    }

    dataReader.Close();

    this.closeConnection();

    return list;
}

我使用列表是因为我正在学习本教程:tutorial

然后当我 return 列表时,我想获取该数据并将其添加到我的 winform 上的标签中。这是我使用的代码:

DBconnect connectDB = new DBconnect();
List<string>[] persGegevens = connectDB.persoonlijkeGegevens(userId);
for (int i = 0; i <= persGegevens.Count(); i++)
{
    switch (i)
    {
        case 0:
            break;
        case 1:
            lblVoornaamVrbl.Text = persGegevens[i].ToString();
            break;
        case 2:
            lblAchternaamVrbl.Text = persGegevens[i].ToString();
            break;
        case 3:
            lblGbrtedatumVrbl.Text = persGegevens[i].ToString();
            break;
        case 4:
            lblFuntieVrbl.Text = persGegevens[i].ToString();
            break;
        default:
            break;
    }
}

但不幸的是,代码不会将 List 中的数据转换为字符串,但元素将被转换为字符串。这就是我得到的:system.collections.generic.list`1[system.string] 我也尝试使用 foreach 来执行此操作,但没有成功,因为我无法指定必须将哪个元素放置在哪个标签中。

你们知道这里的问题是什么吗?这是检索数据的正确方法吗?或者我应该使用其他东西来存储我的数据?

persGegevens[i]List<string> 类型,到 persGegevens[i].ToString() 不会给出任何有意义的东西。你需要这样的东西:

persGegevens[i][j];

您正在尝试对列表执行 ToString(),因此输出。您需要指定要显示的数组或列表中的位置,然后执行 ToString() on。以下将起作用,或者您可以使用另一个变量循环遍历每个用户以获取他们的详细信息。

DBconnect connectDB = new DBconnect();
    List<string>[] persGegevens = connectDB.persoonlijkeGegevens(userId);
    for (int i = 0; i <= persGegevens.Count(); i++)
    {
        switch (i)
        {
            case 0:
                break;
            case 1:
                lblVoornaamVrbl.Text = persGegevens[i][0].ToString();
                break;
            case 2:
                lblAchternaamVrbl.Text = persGegevens[i][1].ToString();
                break;
            case 3:
                lblGbrtedatumVrbl.Text = persGegevens[i][2].ToString();
                break;
            case 4:
                lblFuntieVrbl.Text = persGegevens[i][3].ToString();
                break;
            default:
                break;
        }
    }

我认为 nik0lias 的建议以前是正确的,但如果更改为 :

也许它可以按需要运行
    case 1:
        lblVoornaamVrbl.Text = persGegevens[i][ 0 ].ToString();
        break;
    case 2:
        lblAchternaamVrbl.Text = persGegevens[i][ 0 ].ToString();
        break;
    case 3:
        lblGbrtedatumVrbl.Text = persGegevens[i][ 0 ].ToString();
        break;
    case 4:
        lblFuntieVrbl.Text = persGegevens[i][ 0 ].ToString();

如果我是对的,请考虑是否需要 List 数组 List<>[],或者您可以这样用 List 简化代码:

    string query = "SELECT * FROM gebruiker WHERE id='" + id + "'";

    List<string> listGebruiker = new List<string>();


    if (this.openConnection() == true)
    {
        MySqlCommand cmd = new MySqlCommand(query, connection);
        //Een nieuw datareader object maken en dan query uitvoeren
        MySqlDataReader dataReader = cmd.ExecuteReader();


        while (dataReader.Read())
        {
            listGebruiker.Add(dataReader["id"].ToString());
            listGebruiker.Add(dataReader["voornaam"].ToString());
            listGebruiker.Add(dataReader["achternaam"].ToString());
            listGebruiker.Add(dataReader["geboortedatum"].ToString());
            listGebruiker.Add(dataReader["Rol_id"].ToString());
        }

        dataReader.Close();

        this.closeConnection();

        return list;
    }

    DBconnect connectDB = new DBconnect();
    List<string> persGegevens = connectDB.persoonlijkeGegevens(userId);

    lblVoornaamVrbl.Text = persGegevens[1];
    lblAchternaamVrbl.Text = persGegevens[2];
    lblGbrtedatumVrbl.Text = persGegevens[3];
    lblFuntieVrbl.Text = persGegevens[4];

希望对您有所帮助