首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C#程序中将SQL Server 'Int‘字段转换为'BitVector32’?

如何在C#程序中将SQL Server 'Int‘字段转换为'BitVector32’?
EN

Stack Overflow用户
提问于 2014-08-27 07:03:26
回答 2查看 305关注 0票数 0

完全是初学者跳进深水区。这是我在这里的第一篇文章。

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

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

对C#完全陌生,我偶然发现BitVector 32,并意识到如果我简单地忽略0位,我将有一个布尔值(真/假来描述每个人的可用性),对于一个月的每一天(一个月的31天是32位,还有一些留到2月份,等等)。

代码语言:javascript
复制
BitVector32 availability = new BitVector32();

它处理一个月,但是我可以创建一个由12个bitvector32值组成的数组,并在48个字节中涵盖整个年份(bitvector32使用4个字节x 12个月)。

我可以通过隔离单个位来实例化和填充bitvector32结构。然后,我将availability.data传递给一个方法,以将其写出到定义为Int值的Sql Server Table中:

代码语言:javascript
复制
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格式。

我试过了:

代码语言:javascript
复制
BitVector32 availability = new BitVector32();
availability = myReader.GetInt32(0);

但我得到一个错误“无法隐式地将类型'int‘转换为’System.Collections.Specialized.Bitvector32‘”

我正处在这个过程的边缘,我怀疑这只是一个简单的关键字或造型,但我一直无法找到它。有什么想法吗?

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

任何意见都将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2014-08-27 07:05:47

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

代码语言:javascript
复制
BitVector32 availability = new BitVector32(myReader.GetInt32(0));
票数 2
EN

Stack Overflow用户

发布于 2014-08-27 07:05:53

我想你在找这个;

代码语言:javascript
复制
BitVector32 availability = new BitVector32(myReader.GetInt32(0));

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25516510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档