C#和SQL笔记

1.1 .NET与C#
1.1.1 .NET 概述与C#应用
.NET是Microsoft.NET的简称,包含了能在.NET Framework平台运行的所有编程语言。
C# 是专门为.NET平台设计的一种语言。
1.2 第一个C#程序
1.2.1 新建程序 
使用Visual  Studio2012 创建并运行控制台应用程序包括是三步:新建项目--- 生成可执行文件--- 运行。
.NET Framework提供的快捷键:
F5:启动
Ctrl+F5:开始执行不调试;
1.2.2 认识控制台应用程序文件夹的结构
Program.cs:为项目的启动文件,在该文件中定义项目的启动入口,即Main()方法。在C#中,程序源文件以.cs作为扩展名。
1.2.3 认识C#程序
1. namespace关键字(命名空间),类似与Java中的package。
2. using 关键字 类似与Java中的import关键字
3. class 关键字 表示类
4. Main()方法  跟Java中main()方法一样的效果。
5. 关键代码  console.WriteLine(); 表示从控制台输出内容
Console.RealLine(); 从控制台输入
1.3 C# 中的变量和常量
1.3.1 C#中的数据类型
整型:int  浮点型: float;  双精度型:double;  字符串型:string;
布尔型:bool
其中 C#中布尔的关键字与Java不同,使用bool ,字符串关键字是小写开头
C# 语言要求给浮点变量赋值时,必须以字母f或F结束。
1.3.2 C#中的变量
语法:  数据类型  变量名称;
命名规则:
1. 组成: 由字母(A-Z,a-z)、 10个数字(0-9)、下划线,除此之外不能 含有其他字母
2. 开头: 只能以字母或下划线开头
3. 不能使用C#关键字;
1.3.3 C#中的常量
常量是在程序运行过程中保持不变的值。
语法:const 数据类型  常量名称=值;
常量命名规范:
1. 必须有一定的实际意义
2. 最好以大写字母来命名,中间可根据意义的连接性用下划线做链接,每个常量定义的右侧最好有简单的注释,说明其作用
3. 常量名称长度最好不要超过25个字符。


何时使用常量
1. 用于在程序中一旦设定就不允许被修改的值
2. 用于在程序中被经常引用的值
3. 用于程序中具有特定含义的值
1.4 console类
常用的输出方法有两种:
Console.WriteLine()和Console.Write(). 唯一区别是前者在输出后换行。后者不换行。
常用的输入方法有Console.RealLine()。
1.4.1 C#向控制台输出
利用Console.WriteLine()方法有三种方式:
1. Console.WriteLine();
2. Console.WriteLine(要输出的值);
3. Console.WriteLine(“格式字符串“, 变量列表);
例如:Console.WriteLine(“{0},{1},{2}”,name, age, call);
1.4.2 C#从控制台读入
语法: Console.WriteLine();
Int age int.Parse(Console.ReadLine()); 其中int.Parse()方法的作用是把字符串转换为整数。
1.5 类和对象
1.5.1 自定义方法
语法:
【访问修饰符】 返回值类型 方法名(参数列表)
{
//方法的主体
}
1. 访问修饰符 :一个是public 另一个是 private(私有的)
2. 方法的返回值类型:跟Java一样,
3. 方法名 命名规则: 要有实际的含义; 一般每个单词首字母大写
4. 参数列表 
5. 方法的主体:实现方法的代码,应该先写方法的声明,包括访问修饰符、返回值类型、方法名、参数列表,然后再写方法的主体
1.5.2 理解类和对象
定义类的语法
语法:【访问修饰符】 class 类名
{
//类的主体
}




第二章 C# 语法快速热身
2.1 选择结构
2..1.1  if结构
语法:  1.if 结构
if(条件表达式)
{
//代码块
}
2. if –else结构
If(条件表达式)
{
//代码块
}
else
{
//代码块
}
3.多重if结构
If(条件表达式1)
{
//代码块
}
else  if(条件表达式2)
{
//代码块
}
else if(条件表达式3)
{
//代码块
}
else
{
//代码块
}


4.嵌套if结构
If(条件表达式1)
{
If(条件表达式2)
{
//代码块1
}
Else
{
//代码块2
}
}
Else
{
//代码块3
}
2.1.2 switch 结构 
对比:Java中允许case中没有break语句。但是C#语言中要求每个case和default语句中都必须有break语句。


语法:Java中
Switch(int/char 表达式)
{
Case 常量表达式1:
//语句1;
Break; //可以没有
Case 常量表达式2:
//语句2;
Break; //可以没有
……
Default:
//语句n
}




C#中
Switch(int/char/string表达式)
{
Case 常量表达式1:
//语句1;
Break; //必须有
Case 常量表达式2:
//语句2;
Break; //必须有
……
Default:
//语句n;
Break;  //必须有
}

Switch(int/char/string表达式)
{
Case 常量表达式1:
Case 常量表达式2:
//语句1;
Break; //必须有
……
Default:
//语句n;
Break;  //必须有
}
2.2 数组与循环
2.2.1 一维数组
语法: 数据类型[] 数据名;
对比:在C#中不能把方括号放在数组名的后面。
2.2.3 循环结构
1. while 循环
While循环是先判断条件是否满足,如果条件成立再执行循环体。
语法: while(条件表达式)
{
//代码块
}


2. do-while 循环
 do-while循环是先执行再判断条件,所以至少会执行一次循环体中的语句。
 语法: do
{
//代码块
}while(条件表达式);
3. for 循环
 for循环常常用在确定循环次数的情况中,
语法: for(表达式1;表达式2; 表达式3)
{
//代码块
}


4. foreach 循环
Foreach结构的执行过程是循环体依次取出数组中的每一个元素,然后对每个元素都执行一次循环体的操作。
语法: foreach(元素类型 元素变量名 in 数组)
{
//代码块
}
2.2.4 跳转语句
1. break语句
Break语句将使程序跳出当前循环结构,并继续执行该循环后的语句。
2. continue 语句
作用是退出当前循环结构的本次循环,并开始执行当前循环结构的下一次循环,而不是退出当前循环结构。
2.3 冒泡排序
2.3.1 冒泡排序算法
语法:for(int=0; i{
for(j=0; j< scores.Lenght-1-i; j++)
{
 Temp=scores[j];
Scores[j]=scores[j+1];
Scores[j+1]=temp;
}
}
冒泡排序速记口诀(升序):
1. N个数字来排队,两两相比小靠前
2. 外层循环N-1,内层循环N-1-i;
3. 如果要降序排序,只要把程序中的大于号换成小于号就行了。


1.5.3 注释
C#的行注释和快注释与Java相同,分别使用//和/*..*/,但是文档注释C#中使用“///”,且文档注释的每一行都以“///”开头。  
1.5.4 Visual  Studio调试技巧
1. 设置断点(断点:breakpoint)将光标停在这一行按F9键。
F5:开始调试;
Shift+F5:停止调试
F9:设置或取消断点
Ctrl+F9:取消断点
F10:单步执行
F2: 转到所调用过程或变量的定义
Ctrl+F2 将焦点转移到类的下拉列表框。
2. 监视变量值
将变量添加到监视窗口的方法有两种:
1. 选中并右击需要关注的变量,选择快捷菜单中的“添加监视”选项
2. 在监视1窗口中单击名称下的空白单元格,输入“变量名”,按Enter键






第三章  使用属性升级MyBank
3.1 private 访问修饰符
3.1.1 生活中的访问级别
3.1.2 访问修饰符
如果使用private限制类成员的访问权限,那么这些类成员就只能在该类里面使用,其他类对他们没有访问权限。
C#中的访问修饰符
Public  不受任何限制  访问级别:最高
Private  只有类的内部可以使用 访问级别:最低
3.2 this 关键字
This关键字是指当前对象本身,通过this可以引用当前类的成员变量和方法。
使用this关键字可以解决成员变量和局部变量名称冲突的问题。
3.3 C#中的属性
3.3.1 用方法保证数据安全
3.3.2 用属性实现字段封装
1. C#的属性
语法: privatestring _name;
Public string Name
{
Get{ return _name;}
Set{ _name=value;}
}
Get访问器用来返回相应的私有字段的值。Get访问器与方法相似,必须用return语句返回子墩的值。执行get访问器相当于读取勒种私有字段的值。
Set访问器用来设定相应的私有字段的值。Set访问器类似与返回类型为void的方法。它使用一个隐含的输入参数value。对属性赋值时,将会调用set访问器,并将新的参数值赋予对应的字段。
2.属性的数据类型
定义类中的一个属性时,属性的书库类型必须与它所访问的字段类型一致。
3. 属性的访问类型
 只读属性: 只包含get访问器
 只写属性: 只包含set访问器
 读写属性;  包含get和set访问器
4. 在编码中如何快速的创建属性
 快捷键 ctrl+r+e   选中字段右击,在弹出快捷菜单中选择“重构”-“封装字段”选项


C#中,字段和属性的区别是什么?
通常将字段指定为private,在类内部使用,将属性指定为public,对外部公开,通过get或set访问器对字段提供安全、有效范围的保护。


C#中,属性和方法的区别是什么?
C#中的属性set访问器和get访问器后不使用“()”,因为访问器没有返回值,所以也不需要指定void。
5. 对象初始化器
提供对象初始化器,可以更方便的为对象的属性赋值。
语法: Student student =new Student(){Age=-20};


3.3.3 面向对象的特征——封装
封装的好处:
1. 避免使用非法数据赋值
2. 保证数据的完整性
3. 避免类内部发生修改时,导致整个程序的修改
3.4  值传递和引用传递
3.4.1 值传递
方法的参数传递有两种方式,即按值传递和按引用传递
3.4.2 按引用传递参数
在C#中,利用按引用传递参数的方式可以在方法调用之后,仍然保留对参数值的修改,需要使用ref 关键字来修饰参数。
3.4.4 比较值传递与引用传递
  值传递是将变量的值复制传递给方法,使得该方法的形参和实参的值相同,在调用的方法中修改形参也只是对实参复制品的数据做更新,并没有真正改变实参的值。
引用传递是将要传递的对象的引用复制给方法的形参,使用被调用的方法直接对引用对象进行更改,会影响实参原来的值。






第四章 深入C#的string类
4.1 C#中的String类
4.1.1 常用的字符串处理方法
Bool Equals(string value) 比较一个字符串与另一个字符串value的值是否相等。若相等,则返回true,若不相等,则返回false。
Int Compare(string strA,string strB)比较两个字符串的大小关系,返回一个整数,若A小于B,返回小于0;若等于,返回0; 若大于,返回大于0
Int IndexOf(string value) 获取指定的value字符串在当前字符串第一个匹配项的位置,如果找到value,返回它的位置,如果没有,返回-1;
Int LastIndexOf(string value)获取指定的value字符串在当前字符串最后一个匹配项的位置,如果找到value,返回它的位置,如果没有,返回-1;
String Join(string separator, string[] value)把字符串数组value中的每个字符串用指定的分隔符separate连接,返回连接后的字符串。
String[] Split(char sepatator)  用指定的分隔符separator分割字符串,返回分割后的字符串数组;
string Substring(int starIndex, int length)从指定的位置starIndex开始检索长度诶length的子字符串
string ToLower() 获得字符串的小写形式
string ToUpper() 获得字符串的大写形式
string Trim() 去掉字符串前后两端多余的空格
4.1.4 format格式化
语法:String myString=String。Format(“格式字符串”, 参数列表)
其中 格式字符串包含固定文本和格式项: {索引[,对齐][:格式字符串]}
其中,索引从0开始,与变量列表对应;对齐部分设置显示的宽度和对齐的方式,是一个带符号的整数,整数大小表示数据的宽度,正数为右对齐,负数为左对齐,格式字符串部分包含格式说明符


格式化数值结果表
C 货币格式  String.Format(“{0:C3}”,2000)   ¥2000.000
D 十进制格式String.Format(“{0:D3}”,2000)   2000
F 小数点后的位数固定String.Format(“{0:F3}”,2000)  2000.000
N 用逗号,隔开的数字String.Format(“{0:N}”,250000)  250,000
P 百分比计数法String.Format(“{0:P3}”,0.24545)  24.545
X 十六进制格式String.Format(“{0:X000}”,12) C
4.2 类型转换
4.2.1 简单的类型转换
包含隐式类型转换和显式类型转换
4.2.2 数值类型与字符串之间的转换
1. 字符串转换为数值型
转换为整数型 int.Parse(string)
转换为单精度浮点型 float。Parse(string)
转换为双精度浮点型  double.Parse(string)
2 . 数值型转换为字符串
String age =age。ToString();
4.2.3  使用Convert类进行转换
常用Convert类的类型转换方法
Convert。ToInt32() 转换为整型(int型)
Conver.ToSingle() 转换为单精度浮点型(float型)
Convert.ToDouble() 转换为双精度浮点型(double型)
Convert.ToString() 转换为字符串类型(string型)




第六章 程序数据集散地:数据库
6.1 使用数据库的必要性
有点:1.可以结构化存储大量的数据信息,方便用户进行有效的检索和访问。
3. 可以有效的保持数据信息的一致性、完整性、降低数据冗余。
4. 可以满足应用的共享和安全方面的要求。
5. 数据库技术能够方便智能化分析,产生新有用信息


6.2 当今常用数据库
SQL Server 、Oracle、 IBM DB2 、MySQL等数据库


6.2.2 数据库的基本概念
6.3.1 实体和记录
实体是所有客观存在的、可以被描述的事物


6.3.2 数据库和数据库表
数据库是表的集合,不是简单的存储实体数据,还要求表达实体之间的关系
6.3.3 数据库管理系统和数据库系统
数据库管理系统(DataBase Management System, DBMS)由一个互相关联的数据集合和一组访问数据的程序构成。基本目标是要提供一个可以方便有效的存取数据库信息的环境。
主要功能是维护数据库,并有效地访问数据库中各个部分的数据


数据库系统(DataBase System,DBS)可以对系统提供的数据进行存储、维护和应用,由存储介质、处理对象和管理系统共同组成的集合体,通常由软件、数据库和数据库管理员组成。
数据库由数据库管理系统统一管理,数据的插入、修改和检索都要通过数据库管理系统进行。


6.3.4 数据冗余和数据完整性
数据冗余是指数据库中存在一些重复的数据;数据完整性是指数据库中的数据能够正确地反映实际情况。数据库中允许有一些数据冗余,但是要保持数据的完整性


6.4 登录SQL Server数据库
SQL Server中的数据库按照用途可以分为两种:
1. 系统数据库
2. 用户数据库
系统数据库是管理和维护SQL Server所必需的数据库,用户数据库是用户自己建立的数据库


SQL Server 提供的系统数据库
1. Master 数据库
Master 数据库记录SQL Server系统的所有系统级别信息
1. 所有的登录账户和系统配置设置
2. 所有其他的数据库及数据库文件的位置
3. SQL Server的初始化信息
2. Tempdb数据库
保存所有临时表和临时存储过程,以及临时生成的工作表
3. Model 数据库
可用于在系统上创建的所有数据库的模板
4. Msdb 数据库
供SQL Server 代理程序调度警报、作业及记录操作时使用,另外有关数据库备份和还原的记录,也会写在该数据库中
5. Resource 数据库
只读数据库,包含SQL Server中的所有系统对象


6.4.1 新建一个数据库连接
1.在SSMS的菜单栏中选择“文件”-“连接对象资源管理器”选项,弹出“连接到服务器”对话框
2.在“服务器名称”下拉列表框中选择已经连接过的服务器,也可以选择“《浏览更多》”选择其他服务器
3. Windows身份验证
SQL Server身份验证
Windows身份验证是使用当前登录到操作系统的用户去登录,而SQL Server身份验证是使用SQL Server中建立的用户验证


6.4.2 新建数据库登录名
1. 在“安全性”节点下,右击“登录名”,在弹出的快捷菜单中选择“新建登录名”选项
2. 在新建登录对话框中输入登录名、密码,并指定其默认的数据库
  确定登录名和密码时需要注意
1. 登录名默认是“Windows身份验证”
2. 可以勾选“强制实施密码策略”复选框,对用户输入的密码提出要求
3.登录名操作权限
操作权限分两类:第一类是指用户在服务器范围内能够执行哪些操作 第二类是指该登录名对指定的数据库的操作权限“在用户映射中设置”


6.4.3 新建数据库用户
步骤如下:
1. 在指定数据库“安全性”节点中,右击“用户”,在弹出的快捷菜单中选择“新建用户”选项
2. 在新建对话框中输入用户的名称,选择关联的登录名
3. 赋予用户对该数据库的操作权限
6.5 创建和管理SQL Server数据库
6.5.1 创建数据库
一个数据库至少包含一个数据库文件和一个事务日志文件
1. 数据库文件
数据库文件是存放数据库数据和数据库对象的文件,一个数据库可以有一个或多个数据库文件,一个数据库文件值属于一个数据库,扩展名为.mdf,用来存储数据库的启动信息数据。一个数据库只能有一个主数据库文件
2. 事务日志文件
用来记录数据库的更新情况,扩展名为.ldf
3. 文件组
主要用于分配磁盘空间并进行管理


在SQL Server Management Studio 中,创建数据库步骤如下:
1. 右击“数据库”在弹出的快捷菜单中选择“新建数据库”选项
2. 建立数据库的时候,首先要输入数据库的名称
6.5.3 数据库的管理和维护
1. 分离和附加数据库
右击数据库名称,在弹出快捷菜单汇总选择“任务”—“分离”选项
右击数据库,选择“附加”,选择要添加的数据库路径,确定


2.备份和还原数据库
四种备份方式:完全备份、差异备份、事务日志备份、文件和文件组备份


备份数据库步骤:
1. 展开“数据库”文件夹,右击需要备份分数据库,在快捷菜单中选择“任务”—“备份”,在备份窗口中,在“备份类型”中选择“完整”,
2. 在“备份到”选项下,点击“磁盘”,如果不想使用系统默认的备份地址,选中默认地址删除后单击“添加”按钮,选择保存的位置。
第七章 用表组织数据
7.1 表相关的几个基本概念
7.1.1 数据完整性
1. 实体完整性约束
实体完整性要求表中的每一行数据都反映不同的实体,不能存在相同的数据行
通过索引、唯一约束、主键约束或标识列属性,可以实现表的实体完整性
2.域完整性约束
  通过限制数据类型、检查约束、输入格式、默认值、非空约束等多种方法
3.引用完整性约束
在输入或删除数据行时,引用完整性约束用来保持表之间已定义的关系
4. 自定义完整性约束
7.1.2 主键和外键
1.主键(Primary Key)
一个表只能有一个主键,并且主键列不允许出现空值
选择哪个列作为主键的时候,需要考虑两个原则:最少性和稳定性
2. 外键(Foreign Key)
 值要求与主表的主键或者唯一键相对应


7.2 创建数据库表
7.2.1 在SQL Server Management Studio 中建立数据库表
右击数据库下的“表”选项,选择“新建表”
7.2.2 确定列的数据类型
二进制数据类型:用来存储非字符和文本的数据
Binary 固定长度的二进制数据
Varbinary:可变长度的二进制数据
Image:可用来存储图像
文本书库类型:字符数据包括任意字母、符号或数字字符的组合
Char:固定长度的非Unicode字符数据
Varchar:可变长度的非Unicode字符数据
Nchar:固定长度的Unicode字符数据
Nvarchar:可变长度的Unicode字符数据
Text:存储长文本信息
Ntext:存储可变长度的长文本
日期和时间数据类型:用于存储日期和时间
Datetime:从1753年1月1日到9999年12月31日,准确度为三百分之一或3.33毫秒
数字数据类型:该数据仅包含数字,包括正数、负数及分数
Int、smallint、tinyint、bigint:整数
Float、real:浮点数
货币数据类型:货币数据类型用于十进制货币值,并且精确到小数点后面4位数
Money
Bit数据类型:表示是/否的数据,在SQL Server中用1和0表示,一般1表示是,0表示否
Bit:存储布尔数据类型
7.3 完善表的设计结构
7.3.1 是否允许为空值
在表中选择勾
7.3.2 建立主键
选择要建立主键的列右击,然后选择“设置主键”
7.3.3 默认值
在默认值或绑定里设置值
7.3.4 标识列
标识列的实现方式如下:
1. 只能是数据属于数字类型,
2. 定义成标识列后,需要分别指定:“标识种子”和“标识增量”,默认值是1
3. 定义标识后,该列随数据行的增加而自动增加数值
7.3.5 向表中插入数据
选择表,然后在弹出的快捷菜单中选择“编辑前200行”就可以向表中直接插入数据
7.5 建立表间关系
7.5.1 如何建立表间关系
步骤如下:
1. 在设计表的时候,在表中点击右键,在弹出的快捷菜单中选择“关系”选项,弹出“外键关系”,,单击“添加”按钮可以添加新的关系
2. 单击“表和列规范”最右侧的小按钮,弹出要建立关系的主键表及主键列对话框
3. 选择主键表,主键列,对应的外键表和列
7.6 建立检查约束
设计表的时候,在快捷菜单选择“CHECK约束”,然后在跳出对话框中单击“添加”,在右边单击“表达式”最右侧的小按钮,在“CHECK约束表达式”对话框中输入表达式
7.8 删除数据库表
右击该表,在弹出的快捷菜单中选择“删除”选项可以把该表直接删除,
若删除主表,首先要删除相关的从表保证数据的引用完整性


第八章 用SQL语句操作数据
8.1  SQL简介
8.1.1 SQL 能做什么
可以对数据库的数据进行增、删、改、查等操作。
8.1.3 SQL 的组成
SQL语言主要由以下组成:
1. DML(Data Manipulation Language,数据操作语言,称为数据操纵语言)用来插入、修改和删除数据库中的数据
2. DDL(Data Definition Language ,数据定义语言):用来建立数据库、数据库对象和定义其列,大部分以CREATE开头的命令
3. DQL(Data Query Language,数据查询语言)用来对数据库中的数据进行查询
4. DCL (Data Control Language,数据控制语言):用来控制数据库组件的存取许可,存取权限等
8.1.4 SQL 中的运算符
1.算术运算符
 包括:+加、- 减、*乘、/除、%模  五个
2. 赋值运算符
只有一个运算符即“=”,用于讲一个数或变量或表达式赋值给另一个变量
3.比较运算符
= 等于、>大于、<小于、<>不等于、>=大于等于、<=小于等于、!=不等于
4.逻辑运算符
AND:表示当且仅当两个布尔表达式都为TRUE时,返回TRUE
OR:当且仅当两个布尔表达式都为FALSE时,返回FALSE
NOT:对布尔表达式的值取反,优先级别最高
8.2 使用T-SQL插入数据
8.2.1 使用INSERT插入数据
语法:INSERT [INTO]表名 [(列名列表)] VALUES (值列表);
其中:[into]是可选的,也可以省略
表名是必需的
表的列名是可选的,如果省略,将依次插入所有列
多个列名和多个值列表用逗号分隔
分号(;)是T-SQL语句终止符,分号不是必需的


DEFAULT(默认)关键字来代替插入的数值.
8.2.2 一次插入多行数据
1.通过INSERT SELECT 语句向表中添加数据
INSERT INTO 表名(列名)
SELECT 列名
FROM 表名
注意:
查询得到的数据个数、顺序、数据类型等,必须与插入的项保持一致
2.通过SELECT INTO 语句将现有表中的数据添加到新表中
创建新的标识列
语法:SELECT IDENTITY(数据类型,标识种子,标识增长量) AS 列名
INTO 新表
FROM 原始表
3.通过UNION关键字合并数据进行插入
8.3 使用T-SQL更新数据
语法:UPDATE 表名 SET 列名=更新值[WHERE 更新条件]
注意:
1.SET后面可以紧随多个“列名=更新值”,修改多个数据列的值,不限一个,使用逗号分隔。
2.WHERE 子句是可选的,用来限制更新数据的条件。
8.4 使用T-SQL删除数据
8.4.1 使用DELETE删除数据
语法:DELETE [FROM] 表名 [WHERE <删除条件>]


8.4.2 使用TRUNCAE TABLE 删除数据
TRUNCATE TABLE 用来删除表中的所有行,功能上它类似于没有WHERE子句的DELETE语句
TRUNCATE TABLE 不能用于有外键约束引用的表
8.6 导入和导出数据
8.6.1 导出数据
1.右击要导出的数据库,在弹出的菜单中选择“任务”-“导出数据”选项。
2.选择要从何处取得数据,选择SQL Server自身,并在下方选择要导出的数据库
3.在“目标”中选择“平面文件目标”选项,然后在“文件名”文本框中输入文件名,确认
4.选择复制一个或多个表或视图的数据,下一步
5. 选择表名并设置文本文件的格式
6.确定是否立即运行,下一步,至完成
8.6.2 导入数据
1.首先准备数据
2.右击要导入的数据库,在菜单中选择“任务”-“导入数据”
3.数据源选择数据文件,选择路径
4.选择将数据源复制到目标远,单击“编辑映射”按钮,进行目标列的对应选择
5. 确认后,下一步,至结束


第9章 数据查询基础
9.1 T-SQL查询基础
9.1.1 使用SELECT 语句进行查询
语法:SELECT <列名>
FROM <表名>
[WHERE <查询条件表达式>]
[ORDER BY <排序的列名>[ASC或DESC]]
1. 查询所有的数据行和列
 使用*表示
2. 查询部分行或列
需要使用where条件限制
3. 在查询中使用列的别名
AS后面加别名
4. 查询空值
采用“IS NULL”或“IS NOT NULL”来判断是否为空值
5. 在查询中使用常量列
将一些常来的默认值添加到查询输出中
6. 查询返回限制的行数
使用TOP 关键字来约束
还有百分比PERCENT关键字
9.2 查询排序
9.2.1 如何使用ORDER BY
asc为升序排列,默认, DESC为降序
9.3 在查询中使用函数
9.3.1 字符串函数
CHARINDEX:用来寻找一个指定的字符串在另一个字符串中起始位置
LEN:返回传递给它的字符串长度
UPPER:把传递给它的字符串转换为大写
LTRIM:清除字符左边的空格
RTRIM:清除字符串右边的空格
RIGHT:从字符串右边返回指定数目的字符
REPLACE:替换一个字符串中的字符
STUFF:在一个字符串中,删除指定长度的字符,并在该位置插入一个新的字符串
9.3.2 日期函数
GETDATE:取得当前的系统日期
DATEADD:将指定的数值添加到指定的日期部分后的日期
DATEDIFF:两个日期之间的指定日期部分的间隔
DATENAME:日期中指定日期部分的字符串形式
DATEPART:日期中指定日期部分的整数形式
9.3.3 数学函数
RAND:返回从0到1之间的随机float值
ABS:取数值表达式的绝对值
CEILING:向上取整,取大于或等于指定数值、表达式的最小整数
FLOOR:向下取整,取大于或等于指定数值、表达式的最大整数
POWER:取数值表达式的幂值
ROUND:将数值表达式四舍五入为指定精度
SIGN:对于正数返回+1,对于负数返回—1,对于0则返回0
SQRT:取浮点表达式的平方根
9.3.4 系统函数
CONVERT:用来转变数据类型
CURRENT_USER:返回当前用户的名字
DATALENGHT:返回用于指定表达式的字节数
HOST_NAME:返回当前用户所登录的计算机名字
SYSTEM_USER:返回当前所登录的用户名称
USER_NAME:从给定的用户ID返回用户名


第10章 模糊查询和聚合函数
10.1 模糊查询
10.1.1 通配符
—:一个字符
%:任意长度的字符串
[]:括号中所指定范围内的一个字符
[^]:不在括号中所指定范围内的任意一个字符
10.1.2 使用LIKE进行模糊查询
LIKE运算符用于匹配字符串或字符串的一部分
10.1.3 使用BETWEEN 在某个范围内进行查询
必须知道查找的初值和终值,并且初值要小于等于终值,初值和终值用AND关键字分开
10.1.4 使用IN在列举值内进行查询
使用带列举值的IN关键字来进行查询,将列举值放在圆括号里,用逗号分开
10.2 T-SQL中的聚合函数
10.2.1 SUM()函数
SUM()函数返回表达式中所欲数值的总和,空值将被忽略。只能用于数字类型的列,不能够汇总字符、日期等其他数据类型。
10.2.2 AVG()函数
AVG()函数返回表达式中所有数值的平均值,空值将被忽略,只能用于数字类型的列
10.2.3 MAX()函数和MIN()函数
MAX()函数返回表达式中的最大值,MIN()函数返回表达式中的最小值,忽略空值。只能用于数字型、字符型、及日期/时间类型的列
10.2.4 COUNT()函数
COUNT()函数返回提供的组或记录集中的计数。可以用于除去text、image、ntext以外任何类型的列。可以使用(*)作为COUNT的表达式。使用星号可以不必指定特定的列而计算所有的行数吗,当对所有的行进行计数时,则包括包含空值的行
第11章 连接查询和分组查询
11.1 分组查询
11.1.1 使用GROUP BY 进行分组查询
通常会结合聚合函数一起来使用
11.1.2 多列分组查询
使用GROUP BY关键字时,在SELECT 列表中可以指定的列是有限制的:
1. 被分组的列
2. 为每个分组返回一个值的表达式,如聚合函数计算出的列
11.1.3 使用HAVING子句进行分组筛选
HAVING子句用来对分组后的数据进行筛选,将“组”看作“列”来限定条件
使用顺序:WHERE—GROUP BY — HAVING
11.2 多表连接查询
11.2.1 多表连接查询的分类
常用的连接查询方式:内连接,外连接
11.2.2 内连接查询
内连接查询通常会使用“=”或“<>”等比较运算符来判断两列数据值是否相等
1. 在WHERE 子句中指定连接条件
2. 在FROM子句中使用INNER JOIN... ON
INNER JOIN用来连接两个表
INNER 可以省略
ON 用来设置条件
AS指定表的“别名”
11.2.4 外连接查询
在外连接查询中参与连接的表有主从之分,以主表的每行数据匹配从表的数据列,将符合连接条件的数据直接返回到结果集中,对那些不符合连接条件的列,将被填上NULL值后再返回到结果集中
1. 左外连接查询
左外连接查询的结果集包括LEFT JOIN 子句中指定的左表的所有行,而不仅是连接列所匹配的行。若左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列均为空值
使用LEFT JOIN..ON 或LEFT OUTER JOIN ..ON关键字进行表之间的关联
2. 右外连接查询
使用RIGHT JOIN..ON 或RIGHT OUTER JOIN ..ON关键字进行表之间的关联


第14章  使用ADO.NET访问数据库
14.1  ADO.NET概述
14.1.1 ADO.NET简介
ADO.NET是.NET Framework中不可缺少的一部分,是一组类,通过这些类,.NET应用程序就可以访问数据库。
14.1.2 ADO.NET的主要组件
ADO.NET 有两个组件:.NET Franmework数据提供程序和DataSet(数据集)
1..NET Framework数据提供程序是专门为数据处理及快速地只进,只读访问数据而设计的组件。使用它可以连接数据源、执行命令和检索结果,直接对数据源进行操作。
2.DataSet是专门为独立于任何数据源的数据访问而设计。
.NET Framework用于SQL Server的数据提供程序 ,使用System.Data.SqlClient命名空间


.NET Framework数据提供程序的四个核心对象:
1. Connection 建立与特定数据源的lianjie
2. Command 对数据源执行命令
3. DataReader从数据源中读取只进且只读的数据流
4. DataAdapter 用数据源填充DataSet并解析更新
14.2 使用Connection 对象
Connection对象的常用属性和方法
属性:ConnectionString :设置/获取应用程序连接数据库的连接字符串
方法: void Open():使用ConnectionString属性所指定的设置打开数据库连接
Void Close():关闭与数据库的连接
.NET Framework数据提供程序操作数据库,必须显式地打开和关闭与数据库的连接,也就是说在操作完数据库之间,必须调用Connection对象的Open()方法打开连接;在操作完数据库后,必须调用Connection对象的Close()方法关闭连接。


建立应用程序与数据库连接需要以下三个步骤:
1. 定义连接字符串
Data Source=服务器名;Initial Catalog=数据库名; User ID=用户名;Pwd=密码


2. 创建 Connection 对象 
SqlConnection connection =  new SqlConnection(connString);
3. 打开与数据库的连接 
connection.Open( );


14.2.2 连接数据库示例
Using System.Data.SqlClient;  //SQL Server .NET 数据提供程序命名空间
14.2.3 常见错误
1.数据库连接字符串中各参数之间的分隔符错误
2.数据库连接字符串中参数名称拼写错误
3.数据库连接字符串中引号出现的位置不正确


14.3 异常处理
14.3.1 如何处理异常
try
{      
      connection.open();  //包含可能出现异常的代码
      // ……
}
catch(处理的异常类型)
{
      //处理异常的代码
}
finally
{      
//必须要执行的代码
      connection.Close();  
}


14.4 使用Command对象
14.4.1 认识Command 对象
语法:SqlCommand command=new SqlCommand(String sql , SqlConnection conn);


属性:Connection :Command对象使用的数据库连接
CommandText: 执行的SQL语句


方法:
int ExecuteNonAQuery() :执行不返回行的语句
SqlDataReader ExecuteReader()或SqlDataReader ExecuteReader(CommandBehavior behavior):执行查询命令
Object ExecuteScalar(): 返回单个值。


使用Command步骤 
1. 创建数据库连接
2. 定义 执行的SQL 语句
3. 创建 Command 对象
4. 执行SQL命令 


14.4.3 常见错误
1.没有打开或关闭数据库连接
2.ExecuteScalar()方法的返回值(object)没进行类型转换 

你可能感兴趣的:(C#和SQL笔记)