Как сохранить несколько значений в массиве struct с помощью SqlDataReader

Я хотел бы заполнить массив User данными из моей базы данных SQL Server, используя SqlDataReader,

Это мой код до сих пор:

public struct User
{
    public int id;
    public string log;
    public string password;

    public User (int id1,string s, s2)
    {
        id=id1;
        log =s;
        password=s2;
    }
}

User[] al = new User[50];
int i=0;

using (SqlConnection connection = new SqlConnection("string")
{
    connection.Open();

    SqlCommand command = new SqlCommand("Select [UserName], [Password]. from [TaUser]", connection);

    using (SqlDataReader reader = command.ExecuteReader())
    {
        while (reader.Read())
        {
            // populate the al array with the datas from the 3 columns : ID, UserName, Password
        }
    }

    connection.Close();
}

Я знаю, что если бы у меня был простой arraylist, я мог бы просто сделать al.Add("")Тем не менее, я борюсь, когда дело доходит до структурных массивов.

2 ответа

В вашем коде много ошибок.

Во-первых, ваш конструктор User недействителен, он должен быть:

public User(int id1, string s, string s2)

Во-вторых, ваш запрос не возвращает идентификатор пользователя.

В-третьих, было бы лучше использовать список вместо массива.

При всем этом это должно работать

List<User> userList = new List<User>() ;
using (SqlConnection connection = new SqlConnection("string")
{
connection.Open();

SqlCommand command = new SqlCommand("Select [Id], [UserName], [Password]. from [TaUser]", connection);

using (SqlDataReader reader = command.ExecuteReader())
{
    while (reader.Read())
    {
        var id = reader.GetInt32(0);
        var userName = reader.GetString(1);
        var pwd = reader.GetString(2);
        var user = new User(id, userName, pwd);
        userList.Add(user);
    }
}
connection.Close();

// if you really need an array, do it here
var al = userList.ToArray()

Я бы посоветовал сделать что-то вроде этого:

SqlDataReader dataReader = cmd.ExecuteReader();
DataTable dataTable = new DataTable();
dataTable.Load(dataReader);

Затем прочитайте этот DataTable следующим образом:

string name = dataTable.Rows[0]["UserName"] as string;

Затем заполните пользовательскую структуру собранной информацией. Работа выполнена?

Другие вопросы по тегам