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

本文关键字:BitVector32 我的 程序 字段 Int SQL 转换 Server 何转换 | 更新日期: 2023-09-27 18:19:41

深度跳跃的初学者总数。这是我在这里的第一篇帖子。

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

我正在开发一个应用程序,该应用程序需要在SqlServerDB上为用户保留可用性日历。由于我可以有成千上万(或更多)排,我希望尽可能高效,不浪费空间。

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

BitVector32 availability = new BitVector32();

这可以处理一个月,但我可以创建一个由12个bitvector32值组成的数组,并用48个字节覆盖全年(bitvector 32使用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"

我正处于确定这个过程的边缘,我怀疑这是一个简单的关键词或演员阵容,但我一直找不到。有什么想法吗?

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

任何意见都将不胜感激。

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

您可以使用接受int参数的BitVector32构造函数:

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

我想你正在寻找这个;

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

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