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类型到底占用了多少空间的介绍,望你能有所收获。

时间: 2024-12-18 08:15:33

GridView控件通过bit值显示复选框状态的相关文章

element-ui tree 根据不同叶子节点设置是否显示复选框

公司业务要求不同根节点配置显示与否复选框,官方文档没有这样的配置,所以想到了修改element-ui源码. 1.这里将“node_modules\element-ui\packages”下的tree文件夹整体复制到自己的项目目录(customComponent)中 2.修改tree.vue <el-checkbox v-if="showCheckbox" :style="{ 'visibility': node.data.leaf?'hidden':'visible'

11月8日下午Jquery取属性值(复选框、下拉列表、单选按钮)、做全选按钮、JSON存储、去空格

1.jquery取复选框的值 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv

android listview + checkbox 列表上下滑动导致复选框状态丢失解决办法

以前为这个问题头疼很久.然后去忙其他事情.一直没有去整理,今天好不容易闲下来.就来整整这个listview + checkbox的问题吧 界面: listview_cell: 界面很简单,一个全屏的listview,cell很简单,一个textview一个checkbox activity: package com.example.testlistviewandcheckbox; import java.util.ArrayList; import java.util.List; import

DevExpress TreeList 父子节点复选框状态同步

1.给TreeList tlstRegion添加一个自定列(包含) TreeListColumn IsAll; RepositoryItemCheckEdit repositoryChk = new RepositoryItemCheckEdit();chkIsAll.EditValueChanging += chkIsAll_EditValueChanging;tlstRegion.RepositoryItems.Add(chkIsAll);this.IsAll.ColumnEdit = ch

通过行控制table复选框状态

<el-table @row-click="clickRow" ref="moviesTable" :data="insertModel.tableData"@selection-change="handleSelectionChange"><el-table-column type="selection" width="55"/><el-table-col

GridView控件详解

一.介绍 GridView控件一表格形式显示数据源中的数据.提供对列进行排序.分页以及编辑.删除单个记录的功能. 二.绑定数据源 第一种使用DataSourceID属性.可以直接把GridView控件绑定到数据源控件上,以利用数据源控件的功能实现编辑.删除.排序.分页等功能.(初级) 第二种可以绑定到ADO.NET数据集和数据读取器对象上,但需要为所有功能编写后台代码.(一般使用这种方式) private void gridViewBind() { //获取GridView排序数据列及排序方向

Repeater, DataList, 和GridView控件的区别

http://blog.sina.com.cn/s/blog_646dc75c0100h5p6.html http://www.cnblogs.com/phone/archive/2010/09/15/1826891.html 1. GridView 控件 GridView 控件用于显示表中的数据.通过使用 GridView 控件,您可以显示.编辑.删除.排序和翻阅多种不同的数据源(包括数据库.XML 文件和公开数据的业务对象)中的表格数据. 显示表格数据是软件开发中的一个周期性任务.ASP.N

制作带复选框的ListView控件

实现效果: 知识运用   ListView控件的GridLines //设置是否在ListView控件中显示网格线 public bool GridLines{get;set} 和CheckBoxes属性 //设置listView控件中各数据项是否显示复选框 public bool CheckBoxes{get;set} 以及ListViewItem数据项的Checked属性 //判断是否选中此数据项中的复选框 public bool Checked{get;set} 实现代码: private

jquery获取选中的checkbox复选框的值

jquery获取选中的checkbox复选框的值:checkbox复选框是常用的表单元素之一,既然使用,一般就要获取选中的复选框的值,下面就介绍一下如何使用jQuery实现此功能.代码实例如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/