【问题标题】:C# MySQL Get values from query and split every value into a stringC# MySQL 从查询中获取值并将每个值拆分为字符串
【发布时间】:2022-11-01 22:21:01
【问题描述】:

我已经在互联网上进行了所有搜索,但我找不到任何方法可以满足我的要求。这是我的代码:

using (MySqlConnection connection = new MySqlConnection(verbindung))
{

    connection.Open();

    string query = $@"show tables like '%{tbSearch.Text}%'";
                    MySqlCommand command = new MySqlCommand(query, connection);
    using (MySqlDataReader reader = command.ExecuteReader())
    {
        while (reader.Read())
        {

            listR.Add(reader.GetString(0));

            btnAccount.Text = listR[0];
            btnAccount2.Text = listR[1];

        }
   }

}

我的期望:

  1. 如果有多个可用表,则获取两个字符串。
  2. 我使用下面的代码分别添加值,考虑到当我尝试使用 AutoCompleteMenu 时,它能够分隔每个字符串,例如PrX#0000 和 PxL#0000 不在同一行或值中。
  3. 在按钮上显示值(我可以自己完成这部分,我只需要知道如何将查询中的值分隔成单独的字符串。

    我得到了什么:

    错误:btnAccount2.Text = listR1;错误是:

    System.ArgumentOutOfRangeException: '索引超出范围。必须是非负数且小于集合的大小。 参数名称:索引'

    我猜那是因为字符串本身没有被分成 2

    我几乎尝试了所有方法并在互联网上进行了搜索,但仍然无法找到任何方法来做到这一点。

    这是我试图从读者那里获得的数据:

    Data

    这是我在 MessageBox 中显示 GetString(0) 的数据时得到的结果。

    The first table

    The second table

    当我做MessageBox.Show(reader.GetString(0)); 时,我得到 2 个 MessageBoxes

    通常在我在文本框中键入表格的第一个字母之后,第二个在我关闭第一个 MessageBox 之后。

【问题讨论】:

  • 这个问题似乎与使用 Visual Studio 应用程序无关,因此我删除了该标记。请确保在提问时检查您使用的标签是否正确。
  • 所以while (reader.Read()) 每行循环一次。您将单个项目添加到 listR,但尝试访问第二个项目。为什么是这样?您如何访问仅添加了一项而不是两项的列表的第二项?
  • @ProgrammingLlama 问题是,一旦我添加了 GetString(1),就会出现错误,因为它不存在。然而,我在 GetString(0) 中得到了 2 个表名。这就是我想说的。
  • 您从表的单列中的单行中获得两个表名?什么?
  • “System.ArgumentException:'您指定了无效的列序号。'”当我使用 listR.Add(reader.GetString(1));

标签: c# mysql


【解决方案1】:

如果有多个可用表,您将“获得两个字符串”。循环(围绕reader.Read())将为数据集中的每一行提供一个单独的字符串,即数据库中的每个表。

您需要移动两个字符串的访问权限外部循环。循环第一次运行时,您只有一个字符串,因此您还不能同时访问它们。

listR.Clear();

using (MySqlDataReader reader = command.ExecuteReader())
{
    while (reader.Read())
        listR.Add(reader.GetString(0));
}

btnAccount.Text = listR[0];
btnAccount2.Text = listR[1];

请注意,如果少于两个表,此代码仍然会崩溃,它将忽略前两个表之后的任何表,并且它将以任意顺序选择前两个表(因为您的查询中没有 ORDER BY)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-27
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多