数据库

注册

 

发新话题 回复该主题

NET开发详解SQLServer数据库 [复制链接]

1#

1.概述

在SQLServer中,每个列、局部变量、表达式和参数都具有一个相关的数据类型。数据类型是一种属性,用于指定对象可保存的数据的类型:整数数据、字符数据、货币数据、日期和时间数据、二进制字符串等。

由于SQLServer和C#都是微软的产品,都是在.NET体系下使用的,所以C#和SQLServer中的数据类型都是一一对应的。

不管是.NETFramework,还是.NETCore,SQLServer数据库都是最佳选择,数据类型完全一一对应,不需要额外的转换,且底层逻辑高度兼容。

2.SQLServer数据类型

2.1.整数数据类型

SQLServer的整数数据类型分为:bit、smallint、int、bigint。

1)Bit占1个字节的存储空间,只能用来存储1、0和NULL。对应于.NETFrameWork中的Boolean类型,对应C#中的bool类型。1与True对应,0与False对应。

Bit类型比较特殊,在SQLServer中,使用SSMS可视工具给bit类型的列赋值时,需要输入True或False,而在查询数据时,则显示为1或0。而在使用SQL语句添加数据时,则需要使用1和0表示。

2)Smallint占2个字节的存储空间:smallint类型只能用来存储整数,范围为-2^15(-32,)到2^15-1(32,)。

Smallint对应于C#中的short类型,也对应着.NetFramework的System.Int16结构。

3)Int占4个字节的存储空间:int是最常用的整数类型,范围是-2^31(-2,,,)到2^31-1(2,,,)内的所有整数。

对应于C#中的int类型,也对应于.NetFramework的System.Int32结构。

4)Bigint占8个字节的存储空间:能存储更大的整数,范围为:-2^63(-9,,,,,,)到2^63-1(9,,,,,,)内的所有整数。

Bigint是长整型,占用存储空间最大,对应于.NetFramework的System.Int64结构。与C#中的long对应。

字节越大表示的整数范围越大,如果超过字节范围出会溢出。

2.2.字符数据类型

SQLServer的字符数据类型分为:固定长度的字符串和可变长度的字符串。两者最多都是可以存储个字符,个汉字。

1)固定长度的字符串:有char(n)和nchar(n),n表示指定的长度,能存储的最大字符数。char(3)表示最大可以存储3个字符,1个半汉字,1个汉字占2个字节。

如果char存储的实际字符数小于指定的n,则会在字符串后面使用空格补全,目的是将指定的长度占完。相反,如果char存储的实际字符数大于指定的n,则会将超出的字符删除掉。

char用来存储非Unicode字符,而nchar用来存储Unicode字符串。

Unicode标准字符集中,每个字符占2个字节,包括全世界所有语言的字符。

Nchar与char一样,如果输入的字符串不足指定的长度,则会在原字符串后面补充空格。Nchar最多能存储个字符。

2)可变长度的字符串:有varchar(n)和nvarchar(n),n表示指定的长度,能存储的最大字符数。

存储的是可变的字符串,不足指定长度不会在后面补空格。每个字符也是占1个字节。例如:varchar(3),则表示最大只能存储3个字符,但如果实际存储了2个字符,那么就按实际大小存储,不会在原字符后面补空格。

Nvarchar用来存储可变长的Unicode字符串。Varchar存储非Unicode字符串。

另外,varchar(MAX)和nvarchar(MAX)表示可以存储最多的字符串。

2.3.浮点数据类型

SQLServer的浮点型分为:float和real。其中float表示双精度浮点数据类型,real表示单精度浮点数据类型。

Real数据类型占用了4个字节的存储空间。Real是一种近似值类型。Real数据类型即可以存储整数,也可以存储小数。

近似数值数据类型并不存储为许多数字指定的精确值,它们只储存这些值的最近似值。

由于float和real数据类型的这种近似特性,因此当要求使用精确数值时,比如在财务应用程序、需要舍入的操作或等值核对中,请勿使用这些数据类型。而应使用integer、decimal、money或smallmoney数据类型。

在WHERE子句搜索条件(特别是=和运算符)中,应避免使用float列或real列。float列和real列最好只限于比较或比较。

Float数据类型与real一样,都是用来表示近似值的,但float类型可以占4个或8个字节的存储空间。

2.4.精确数据类型

SQLServer精确数据类型使用Decimal或Numeric表示,两者完全一样,建议使用Decimal类型。是一种可变的小数类型,带固定精度和小数位数,范围是:-+1~-1,默认精度为18位,最小精度是1位,最大精度是38位。

例如:decimal(5,3)表示整数部分和小数部分最大一共是5位,其中小数最大为3位,则整数位最大就是2位。

Decimal如果输入的小数位数超出指定的位数,则自动四舍五入。

如果输入2位以上的整数部分就会出错。

如果输入的小数位数超出了指定的小数位数,则SQLServer会自动四舍五入。

2.5.日期数据类型

SQLServer的日期型分为:datetime、date和time。

1)Datetimeatetime数据类型用于存储日期和时间值。占8个字节的存储空间。范围是:年1月1日到年12月31日。

例如:-03-:07:06.

2)Dateate数据类型用于存储日期数据,可以存储1-01-01~-12-31之间的任意日期值,占3个字节的固定存储空间。

3)Time(n)ime(n)数据类型用于存储时间值,定义一天中的某个时间。此时间不能感知时区且基于24小时制。使用24小时制表示。取值范围是:00:00:00.0到23:59:59.999之间的时间值。

Time(n)默认占固定的5个字节的存储空间。n是0到7位数字,范围为0到999,它表示秒的小数部分。

2.6.货币数据类型

SQLServer货币数据类型使用money表示,money数据值有整数部分和小数部分组成,范围为:-~(-,,,,.5到,,,,.5)之间,占固定的8个字节存储空间。

小数部分精确到4位。小数位数多于4位,则会自动四舍五入。

从以上SQLServer数据库的数据类型上看,与C#中的数据类型,还有.NET中的数据类型,都是完全兼容的,因为微软在设计之前,本身就要在C#中使用的,C#与SQLServer之间是通过ADO.NET通信的。所以其类型是完全兼容的。

分享 转发
TOP
发新话题 回复该主题