@beduin01

Как на C# заполнить массив данными?

Мне посоветовали в C# для описания структуры данных использовать классы. Вот описание моих данных.

namespace DBSync.Model

{
   public  class UserData
    {
        public string Id { get; set; }
        public string Guid { get; set; }
        public string Name { get; set; }
        public byte[] UserBlob { get; set; }
        public string FL { get; set; }

     
    };
}


В классе для работы с базой данных я делаю следующее:

private UserData ud = new UserData(); // создал экземпляр

Заполняю:

public UserData GetData()
        {
            try
            {
                string sql = @"SELECT id, guid, username, userblob, ""FL"" FROM ""USERS"" WHERE ""FL""=10;";

                NpgsqlCommand command = new NpgsqlCommand(sql, (NpgsqlConnection)Connection);

                NpgsqlDataReader dr = command.ExecuteReader(); // here exception
                if (!dr.HasRows)
                {
                    Console.ForegroundColor = ConsoleColor.Cyan;
                    Console.WriteLine("[INFO] PostgreSQL do not have data with FL=10");
                    Console.ResetColor();
                }
                int i = 0;
                while (dr.Read())
                {
                    // UserData ud = new UserData();
                    ud.Id = dr[0].ToString();
                    ud.Guid = (dr[1].ToString());
                    ud.Name = (dr[2].ToString());
                    ud.UserBlob = (byte[])dr[3];
                    ud.FL = dr[4].ToString();
                    i++;
                }
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine("[INFO] Syncronisated PG->SQLite rows: {0}", i);
                Console.ResetColor();
                dr.Dispose(); // releases connection
                try
                {
                    sqllite.Connect();
                    sqllite.InsertData(ud);
                    string sqlUpdate = @"UPDATE ""USERS"" SET ""FL""=11 WHERE ""FL""=10;";
                    //NpgsqlCommand commandUpdate = new NpgsqlCommand(sql, (NpgsqlConnection)Connection);
                    NpgsqlCommand cmd = new NpgsqlCommand(sqlUpdate, (NpgsqlConnection)Connection);
                    cmd.ExecuteNonQuery();

                    if (i > 0)
                    {
                        Console.WriteLine("Flags in PostgreSQL set to 11 (waiting for sync)");
                    }
                        
                    sqllite.CloseConnect();
                    Console.ReadKey();

                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    Console.WriteLine("Can't insert data to SQLite");
                }
                

            }

            catch (Exception e)
            {
                Console.WriteLine("SelectDataForSync function");
                Console.WriteLine(e.Message);
            }

            return ud;
        }



Но проблема в том, что у меня тут в мой экземпляр попадут только последние данные. Это же не массив экземпляров, а один экземпляр. Как быть то?

Мне нужно взять данные и потом вставить то что собрал в другую БД.
  • Вопрос задан
  • 2838 просмотров
Решения вопроса 1
EreminD
@EreminD
Кое-что умею
вам нужно использовать List
Для каждой записи создаете новый экземпляр и добавляете (метод Add()) его в список

UPD: как-то так
List<UserData> usersList = new List<UserData>(); //создали список
while (dr.Read())
{
   UserData ud = new UserData(); //создаем один экземпляр
   ud.Id = dr[0].ToString(); //наполняем его
   ud.Guid = (dr[1].ToString());
   ud.Name = (dr[2].ToString());
   ud.UserBlob = (byte[])dr[3];
   ud.FL = dr[4].ToString();

   usersList.Add(ud); //добавляем в список
}

int usersCount = usersList.Count; //количество элементов в списке
Console.WriteLine("[INFO] Syncronisated PG->SQLite rows: {0}", usersCount);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы