GridViewコントロールbit値でチェックボックスの状態を表示

3081 ワード

先日VS 2013でAspを作りました.Netの下でGridViewコントロールでデータ選択状態を表示する小さな例はbitに関するいくつかの新しい認識を引き起こした.
まず私の例を簡単に話しましょう.
VSでWebフォームを新規作成し、GridViewコントロールをドラッグしてSql Serverデータベースのデータソースをバインドし、設定テンプレートで新しい列を追加します.この列にCheckBoxコントロールを追加し、データベースのフィールドにバインドします.
最初にこのフィールドのタイプをvarchar、フィールドの値をTrue、Falseなどに設定します.バインドしても目的の効果は得られません.つまり、F 5以降のWebページ内のデータベースisTextフィールドの値がTrueのデータ行はデフォルトで選択されていません.
ネットで調べてみると、isTextフィールドタイプの問題で、varcharをbitに変更します.理解できない.
プロジェクトや例を作るとき、bitタイプを使ったことがないし、ブール値であるTrueやFalseをbit型に変えようとは思わなかった.
では、なぜそれを変えたのでしょうか.
これはbitタイプから言います.
ビットデータ型はbitキーワードで宣言され、ビット型データには0と1の2つの値しかありません.0以外の値を入力すると,システムはいずれも1として扱う.このデータ型は、真、偽、またははい、Noなどの2値選択を表す論理変数としてよく使用されます.
SQL Server 2008ではbit列の入力値としてTrue/Falseを直接使用でき、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 Server 2000では、ブール値がなく、bitが0,1,nullの3つしかありません.
ではbitを論理としてデータ型を判断するメリットは何ですか?
まずbitタイプ自体が1ビットを表し,単独の個体として存在する場合,最大1バイト,最低1ビットを占有する.疑問を抱く人もいるかもしれませんが、どうして一番少ないのですか.同じタイプのデータがデータベースに占める空間は固定されていませんか?
 
そう思えばよかったと言わざるを得ない.ではbitはデータベースにどのように存在しますか?どのようにしてその節約空間の特徴を体現することができますか?必要なスペースが小さいから?
次に、SqlServerデータベースがbitタイプのデータをどのように格納しているかを見てみましょう.   
実際にSQL Server BITタイプが占有するスペースは、BITタイプのカラムが存在するテーブルの位置に関係しており、BITが1バイトを占有している場合もあれば、BITが実際に数ビットを占有している場合もあります(いくつかのBITタイプのカラムは1バイトを共有しています).
具体的に分析してみましょう.
1.個別のBITタイプの列は、1バイトを占有します.すなわち、1つのBITタイプの列の左の列と右の列はBITタイプではありません.  
例:int(定長列)bit char(定長列)SQL Serverは、テーブル内のデータを格納する際に、テーブル内の列を元の順序で定長と変長(変長はvarchar,nvarchar,varbinaryなど)の2つのグループに分けます.データ・ページにデータを格納するときは、一定の長さのデータをすべて格納してから、長くなるデータを格納します.
ここでbit列の左側はintタイプ、右側はcharタイプで、いずれも一定長であり、SQL Server BITタイプではないため、intとcharの間にbitを格納するバイトを残しなければならない.ビットの1つしか使用されていないが.
 
     2.複数のBITタイプのカラム間で、長いデータ型カラムを使用して分離すると、長いカラムが削除され、連続するカラムの数が維持され、各カラムが1ビットを占め、8カラム以上であればさらに多くのバイトが占有されます.
例:bit varchar(長くなる)bit nvarchar(長くなる)bit int(一定長)ここでは、長くなる列をフィルタリングしてbit、bit、bit、intとなり、3つのBITタイプの列が連続しているので、この3つは1バイト共通になります.
 
     3.1つのテーブルに複数のSQL Server BITタイプのカラムがあり、その順序が1バイトを共有できるかどうかを連続的に決定します.SQL Serverには列順に格納され、最初の列と最後の列はBITデータ型列であり、1バイトを共有することはできません.
すなわち、以下のテーブルt 1とテーブルt 2の占有スペースは異なり、t 1データは7バイト、t 2データは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   
) 

しかし、以下のt 3およびt 4テーブルでは、中間が長くなるデータ型であるため、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タイプがどれだけのスペースを占めているかを紹介していますので、ご収穫をお待ちしています.