首页 > 代码库 > GridView控件通过bit值显示复选框状态
GridView控件通过bit值显示复选框状态
前几天用VS2013做了一个Asp.net下用GridView控件显示数据选中状态的小例子,引发了关于bit的一些新认识。
先简单说说我这个例子吧。
在VS里新建一个web窗体,然后拖入一个GridView控件,绑定Sql Server数据库里的数据源,再通过设置模板添加一个新列。在这个列中加入一个CheckBox控件,然后绑定到数据库里的字段。
开始我设置这个字段的类型为varchar,字段的值为True、False等。绑定后却无法达到想要的效果,即F5后网页内数据库isText字段值为True的数据行没有默认被选中。
网上查了一下,原来是isText字段类型的问题,要把varchar改成bit。表示不理解。
原来做项目或例子时,从来也没用过bit类型,更没想过要把身为布尔值的True或False改为bit型。
那么,为什么要改了它呢?
这要从bit类型说起。
位数据类型用bit关键字声明,位类型数据只有两种取值:0和1。在输入0以外的其他值时,系统均把它们当作1看待。这种数据类型常作为逻辑变量使用,用来表示真、假或是、否等二值选择。
在SQL Server2008中可以直接使用True/False作为bit列的输入值,SQL Server会自动把输入的True/False转换为1/0。
我们看一个例子:
Declare @var1 bit, @var2 bit set @var1 = 10 set @var2 = 0 select '@var1 ' = @var1, '@var2 ' = @var2 其执行结果为: @var1 @var2 1 0
所以,我们原来经常用的varchar是不合理的。
注:在Sql Server2000中,没有布尔值,bit只有0,1,null三种情況。
那么,用bit作为逻辑判断数据类型有什么好处?
首先,bit类型本身表示1位,作为单独的个体存在的话,最多占用一字节,最少占用一位。有人可能会产生疑问,怎么还最多最少的?同一类型的数据在数据库中所占的空间难道不固定?
不得不说,要是这么想就对了。那么bit在数据库中是怎么存在的?怎么能体现出它的节省空间特点来?仅仅因为它所需空间小?
下面我们看看SqlServer数据库是怎么存储bit类型数据的。
实际上SQL Server BIT类型占用的空间与BIT类型的列所在表的位置有关,有些情况下BIT占用了一个字节,有些情况下BIT实际占用了几个位(几个BIT类型的列共用一个字节)。
下面就来具体分析一下:
1、单独的BIT类型的列将占用一个字节,即一个BIT类型的列的左边定长列和右边定长列都不是BIT类型。
示例:int(定长列) bit char(定长列)
SQL Server在存储表中的数据时先是将表中的列按照原有顺序分为定长和变长(变长就是长度不固定的数据类型,如varchar,nvarchar,varbinary等)两组。在数据页中存储数据时先存储所有定长的数据,然后再存储变长的数据。
这里由于bit列的左边是int类型,右边是char类型,都是定长的,而且不是SQL Server BIT类型,所以int和char之间必须留出一个字节来存储bit,虽然它只用到了其中的一个位。
2.多个BIT类型的列之间使用变长数据类型列分开,则去掉变长列,然后看它们保持连续的列的个数,每列占用一个位,如果多于8列那就再占用更多的字节。
示例:bit varchar(变长) bit nvarchar(变长) bit int(定长)
这里将变长列筛选出来后就变成了bit、bit、bit、int,有3个BIT类型列是连续的,所以这三个将公用一个字节。
3.一个表中有多个SQL Server BIT类型的列,其顺序是否连续决定了它们是否可以共享一个字节。SQL Server中按照列顺序存储,第一列和最后一列都是BIT数据类型列,不可以共用一个字节。
也就是说下面的表t1和表t2占用的空间是不同的,t1数据占用了7字节,t2数据占用了8字节。
CREATE TABLE t1 ( a INT PRIMARY KEY, b BIT NOT NULL, c BIT NOT NULL, d CHAR(2) NOT NULL ) CREATE TABLE t2 ( a INT PRIMARY KEY, b BIT NOT NULL, c CHAR(2) NOT NULL, d BIT NOT NULL )
但是在下面的t3和t4表中,由于中间是变长数据类型,所以他们的BIT列占用的数据空间是相同的。
CREATE TABLE t3 ( a INT NOT NULL, b BIT NOT NULL, c VARCHAR(2) NOT NULL, d BIT NOT NULL ) CREATE TABLE t4 ( a INT NOT NULL, b BIT NOT NULL, c BIT NOT NULL, d VARCHAR(2) NOT NULL )
以上的相关内容就是对SQL Server bit类型到底占用了多少空间的介绍,望你能有所收获。
GridView控件通过bit值显示复选框状态