【问题标题】:Accessing each column of each row on SqlCommand and ExecuteReader访问 SqlCommand 和 ExecuteReader 上每一行的每一列
【发布时间】:2018-03-07 14:56:51
【问题描述】:

有没有办法索引 reader 变量,以便我可以访问每个被选中的用户?因为这每次只获得第一条记录

using (SqlCommand cmd = new SqlCommand("Select * from users", con))
{
    using (SqlDataReader reader = cmd.ExecuteReader())
    {
        while (reader.Read())
        {
            for (int i = 0; i < reader.FieldCount; i++)
            {
                user = new Users(reader["name"].ToString(), reader["image_path"].ToString());

                //MessageBox.Show(reader[1].ToString() + " " + reader[2].ToString());
            }
        }
    }
}

【问题讨论】:

  • 读者只是一个(不要得到读者[1]),但每次迭代都会返回一个新行..我不明白你到底需要什么。

标签: c# sql wpf select


【解决方案1】:

我认为您误解了 SqlDataReader 的用途。

每个循环通过

while (reader.Read())

将遍历返回的数据集的一行。如果您希望在消息框中显示每个用户,您的代码应该如下所示。

    using (SqlCommand cmd = new SqlCommand("Select * from users", con))
    {
        using (SqlDataReader reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                user = new Users(reader["name"].ToString(), reader["image_path"].ToString());
                MessageBox.Show(user.ToString());
            }
        }
    }

如果您想显示所有用户最后加入到一起,您需要执行以下操作。

    var users = new List<Users>();
    using (SqlCommand cmd = new SqlCommand("Select * from users", con))
    {
        using (SqlDataReader reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                user = new Users(reader["name"].ToString(), reader["image_path"].ToString());
                users.Add(user);
            }
        }
    }

    MessageBox.Show(string.Join(" ", users.Select(x => x.ToString()));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    • 2014-03-05
    • 1970-01-01
    • 1970-01-01
    • 2017-09-30
    • 1970-01-01
    相关资源
    最近更新 更多