0

完全初学者在深端跳跃。这是我在此的头一篇博文。

我是一名大型机程序员,试图加入 1990 年代并学习一些面向对象的编程(目前对我来说是希腊语)。请原谅我下面的基本解释。

我正在开发一个应用程序,该应用程序需要为 Sql Server DB 上的人员保留可用性日历。由于我可以有数万(或更多)行,我希望尽可能高效而不浪费空间。

对 C# 来说完全是绿色的,我遇到了 BitVector 32,并意识到如果我简单地忽略 0 位,我将在每个月的每一天都有一个布尔值(True/False 来描述每个人的可用性)(32 位代表 31一个月中的几天,还有一些留在二月等)。

BitVector32 availability = new BitVector32();

这处理一个月,但我可以创建一个包含 12 个 bitvector32 值的数组,并将全年覆盖在 48 个字节中(bitvector32 使用 4 个字节 X 12 个月)。

通过隔离各个位来实例化和填充 bitvector32 结构没有问题。然后,我将 availability.data 传递给一个方法,将其写入定义为 Int 值的 Sql Server 表:

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”

我正处于确定这个过程的边缘,我怀疑它是一个简单的关键字或演员,但我一直没能找到它。有任何想法吗?

另外,这是正确的方法吗?我不想一整年都做一个会占用多余空间的布尔数组。

任何输入将不胜感激。

4

2 回答 2

2

您可以使用带参数的构造BitVector32 函数int

BitVector32 availability = new BitVector32(myReader.GetInt32(0));
于 2014-08-26T23:05:47.387 回答
0

我想你正在寻找这个;

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

BitVector32有一个构造函数,Int32但是你不能只将 an 分配Int32给 a BitVector32,因为它们的类型不同,而且 C# 不会进行这样的隐式转换。

于 2014-08-26T23:05:52.830 回答