Как мне преобразовать поле Int в SQL Server в BitVector32 в моей программе на C#?

Тотальный новичок прыгает в глубокий конец. Это мой первый пост здесь.

Я программист для мэйнфреймов, пытаюсь присоединиться к 1990-м годам и научиться некоторому объектно-ориентированному программированию (что в настоящее время мне нравится). Пожалуйста, прости мое простое объяснение ниже.

Я занимаюсь разработкой приложения, которое должно вести календарь доступности для людей на БД Sql Server. Поскольку у меня могло быть десятки тысяч (или более) рядов, я надеялся быть максимально эффективным и не тратить пространство.

Будучи полностью зеленым для C#, я наткнулся на BitVector 32 и понял, что если я просто проигнорирую 0 бит, у меня будет булево значение (True/False для описания доступности каждого человека) для каждого дня месяца (32 бита для 31 дней в месяце, с некоторыми оставшимися на февраль и т. д.).

BitVector32 availability = new BitVector32();

Это обрабатывает один месяц, но затем я мог бы создать массив из 12 значений bitvector32, и весь год был бы покрыт 48 байтами (bitvector32 использует 4 байта X 12 месяцев).

У меня нет проблем с созданием и заполнением структуры bitvector32 путем выделения отдельных битов. Затем я передаю доступность.data методу, чтобы записать его в таблицу сервера Sql, определенную как значение Int:

UpdateDB(key1, key2, availability.Data);

     static void UpdateDB(int key1, int key2, Int32 avail)
     {
         using (SqlConnection connection = new SqlConnection etc etc etc) 
         {
             connection.Open();
              string selectString = @"Update VDB SET AVAILABILITYMONTH = @avail WHERE KEY1 = @key1 AND KEY2 = @key2";
             SqlCommand cmd = new SqlCommand(selectString, connection);
             cmd.Parameters.AddWithValue("@key1", key1);
             cmd.Parameters.AddWithValue("@key2", key2);
             cmd.Parameters.AddWithValue("@avail", avail);
             cmd.ExecuteNonQuery();
             connection.Close();
         }
     }

Моя проблема в моей следующей программе, где мне нужно прочитать это целочисленное значение и преобразовать или привести (?) Его обратно в формат Bitvector32.

Я пробовал это:

BitVector32 availability = new BitVector32();
availability = myReader.GetInt32(0);

но я получаю сообщение об ошибке "Не удается неявно преобразовать тип 'int' в 'System.Collections.Specialized.Bitvector32"

Я на грани приближения к этому процессу и подозреваю, что это простое ключевое слово или актерский состав, но я не смог его найти. Есть идеи?

Кроме того, это правильный подход? Я не хотел делать логический массив в течение всего года, который занимал бы лишнее пространство.

Любой вклад будет оценен.

2 ответа

Вы можете использовать BitVector32 конструктор, который принимает int аргумент:

BitVector32 availability = new BitVector32(myReader.GetInt32(0));

Я думаю, что вы ищете это;

BitVector32 availability = new BitVector32(myReader.GetInt32(0));

BitVector32 имеет конструктор, который принимает Int32 Однако вы не можете просто назначить Int32 к BitVector32 потому что они не одного типа и C# не делают неявных преобразований, как это.

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