我是一个C#的新手,但我正在尝试创建一个简单的代码来连接我的mysql数据库(我从google获得的大部分代码)。所以我有这个部分,从数据库中选择一些内容并存储在一个列表中。现在我想从另一个类访问这个,但我不知道怎么做,我也找不到谷歌的答案(这个线程也没有为我工作:Access List from another class),所以有人可以帮助我吗?
以下是特定代码:

public List<string>[] Select()
        {
            string query = "SELECT * FROM users";

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

            //Open connection
            if (this.OpenConnection() == true)
            {
                //Create Command
                MySqlCommand cmd = new MySqlCommand(query, 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["id"] + "");
                    list[1].Add(dataReader["test"] + "");
                    list[2].Add(dataReader["balance"] + "");
                }

                //close Data Reader
                dataReader.Close();

                //close Connection
                this.CloseConnection();

                //return list to be displayed
                return list;
            }
            else
            {
                return list;
            }
        }

最佳答案

说真的,我认为你在这里构建数据的方式很奇怪。
您正在创建一个对象数组,其中的对象是字符串列表:

List<string>[] list = new List<string>[3];

你想在对象中思考;创建一个表示数据的类;在本例中是用户。像这样的:
public class User
{
    public string Id { get; set; }
    public string Test { get; set; }
    public string Balance { get; set; }
}

所以我个人会做以下事情:
创建一个表示每个用户记录的类。
创建一个变量来保存用户列表。
从MySql读取并将每个记录分配给一个新的用户对象。
将用户添加到列表中。
返回列表。
将Select方法的返回类型更改为List<User>,如下所示:
public List<User> Select() {

然后修改方法的其余部分以创建并返回用户列表。
public List<User> Select() {

    List<User> list = new List<User>();

    if (this.OpenConnection() == true)
    {
        MySqlCommand cmd = new MySqlCommand(query, connection);

        MySqlDataReader dataReader = cmd.ExecuteReader();

        while (dataReader.Read())
        {
            User user = new User();

            user.Id = dataReader["id"].toString();
            user.Test = dataReader["test"].toString();
            user.Balance = dataReader["balance"].toString();

            list.Add(user);
        }

        dataReader.Close();

        this.CloseConnection();
    }

    return list;
}

然后你可以使用你的列表如下:
ClassThatContainsSelectMethod yourDBObject = new ClassThatContainsSelectMethod();

List<User> users = yourDBObject.Select();

foreach (User user in users)
{
    Console.WriteLine(user.Id, user.Test, user.Balance);
}

当然,使用工厂和错误/空检查可以更好地构建这段代码,但它应该能让您朝着正确的方向前进。

10-04 22:28
查看更多