如何转换SQL Server' Int'字段到' BitVector32'在我的C#程序中?

时间:2014-08-26 23:03:26

标签: c# bitvector

总的初学者跳跃在深处。这是我在此的头一篇博文。

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

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

对于C#完全是绿色的,我遇到了BitVector 32并意识到如果我只是忽略0位,那么我将在每个月的每一天都有一个布尔值(True / False来描述每个人的可用性)(32本月31天的比特,其中一些在2月剩下,等等)。

BitVector32 availability = new BitVector32();

这处理一个月,但我可以创建一个12位bitvector32值的数组,并用48个字节覆盖整年(bitvector32利用4个字节X 12个月)。

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

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 个答案:

答案 0 :(得分:2)

您可以使用带有BitVector32参数的int constructor

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

答案 1 :(得分:0)

我认为你正在寻找这个;

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

BitVector32有一个带Int32的构造函数但是你不能只将Int32分配给BitVector32因为它们不是同一类型而C#不是做那样的隐式转换。