【问题标题】:C# list<string> in a list<string>[] .toList()C# list<string> in a list<string>[] .toList()
【发布时间】:2016-09-24 11:38:09
【问题描述】:

我目前正在学习如何使用数据库连接以及如何读写数据。我正在为 Visual Studio 使用 Mysql 数据/连接器 6.1。这支持访问 localhost 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

然后,当我返回列表时,我想获取该数据并将其添加到我的 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 来执行此操作,但这不起作用,因为我无法指定必须将哪个元素放置在哪个标签中。

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

【问题讨论】:

  • 使用 DataTable 让您的代码更易于使用stackoverflow.com/questions/11993211/…
  • @MurrayFoxcroft 根据我的经验,从来没有像这样使用 DataTable 让事情变得更容易
  • 我建议您研究使用 Entity Framework 和 Linq,这可能会让您更容易理解。
  • 您应该使用 MySqlCommand 参数,而不是将 id 直接传递给字符串。查看here 了解更多信息
  • 谢谢大家的建议。

标签: c# list tostring mysql-connector


【解决方案1】:

我认为 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];

希望对你有帮助

【讨论】:

  • 不使用 list 数组而是使用 list 可能确实是一个更好的解决方案。我没有考虑这一点,因为我正在学习教程。谢谢。
【解决方案2】:

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

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;
        }
    }

【讨论】:

  • 这确实有效,我使用 PersGegevens[i][0] 因为 list[] 上的每个列表只有 1 个元素。感谢您的帮助。
【解决方案3】:

persGegevens[i]List&lt;string&gt; 类型,所以persGegevens[i].ToString() 不会给出任何有意义的东西。你需要这样的东西:

persGegevens[i][j];

【讨论】:

    猜你喜欢
    • 2013-11-03
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    • 2020-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多