代码连接 SQL Server 2017

@[toc]## 1 Visual Studio 2019 连接SQL Server

1.1 获取连接字符串

这一步的目的是获取连接数据库的字符串,获取连接字符串的步骤如下,直接图解:
代码连接 SQL Server 2017_第1张图片
代码连接 SQL Server 2017_第2张图片
代码连接 SQL Server 2017_第3张图片
代码连接 SQL Server 2017_第4张图片
代码连接 SQL Server 2017_第5张图片

1.2 C#语言中访问数据库

新建一个C#控制台应用,添加某个类。代码如下:

using System;
using System.Data.SqlClient;

namespace ConsoleApp1 {
    class Program {
        static string conString = "Data Source=KEVINWIN10;Initial Catalog=db_movies;Integrated Security=True";  // 连接字符串
        static string queryS = "select * from tb_movie";    // 查询的字符串
        /// 
        /// 获取数据库连接对象SqlConnection
        /// 
        /// 
        static SqlConnection connection() {
            SqlConnection con = new SqlConnection(conString);
            return con;
        }
        /// 
        /// 测试查询,把查询结果打印
        /// 
        /// 
        /// 
        static void queryData(string queryS,SqlConnection con) {
            SqlCommand sc = new SqlCommand(queryS,con);
            con.Open();
            SqlDataReader sqr = sc.ExecuteReader();
            while(sqr.Read()) {
                String name = sqr.GetString(2);
                Console.WriteLine(name);
            }
        }
        /// 
        /// Main函数,函数入口
        /// 
        /// 
        static void Main(string[] args) {
            SqlConnection con = connection();
            queryData(queryS,con);
            con.Close();
            Console.WriteLine("数据库测试成功");
        }
    }
}

1.3 MSSMS操作数据库

连接数据库
Microsoft SQL Server Management Studio 18连接本机数据库。图解如下:
代码连接 SQL Server 2017_第6张图片
通过MSSMS图形表创建数据库和表
创建数据库
代码连接 SQL Server 2017_第7张图片
代码连接 SQL Server 2017_第8张图片
创建表
代码连接 SQL Server 2017_第9张图片
代码连接 SQL Server 2017_第10张图片
插入数据
代码连接 SQL Server 2017_第11张图片
代码连接 SQL Server 2017_第12张图片

1.4 通过代码创建数据库和表

代码连接 SQL Server 2017_第13张图片
通过代码创建数据库

create database db_test;	-- 创建数据库
drop database db_test;	-- 删除数据库
-- 创建数据库的时候配置参数
create database db_test on primary(
	name = 'db_test',
	filename='C:\db_test.mdf',
	size=5MB,
	maxsize=150MB,
	filegrowth=20%,
)
log on(
	name='db_test_log',
	filename='C:\db_test.mdf',
	maxsize=150MB,
	filegrowth=20%,
)

通过代码创建表

create database db_test;
use db_test;
-- 创建表
create table Departments(
	id int identity(1,1) primary key,
	name varchar(100) not null
)
-- 删除表
drop table Departments;
create table Employees(
	id int identity(1,1) primary key,
	idcard varchar(20) not null,
	name varchar(40) not null,
	gender bit not null,
	joinDate datetime,
	age int,
	address varchar(200),
	phone varchar(100),
	depId int not null,
	email varchar(100)
)

1.5 增删改查操作

Insert语句
表中的主键设置了自增长,不需要设置值。

-- 向表中添加一条记录
insert into Employees 
values('222222','张三','男','2019-12-11',20,'广东东莞','1234567222',1,'[email protected]');
-- 查询表中所有记录
select * from Employees;

update语句
语法  update 表名 set 列名 = 列值... where语句;

-- 把id为1的记录的name值改为 李四
update Employees set name = '李四' where id = 1;

delete语句

-- 删除id为1的记录
delte from Employees where id = 1;

1.6 alter修改约束(包括外键约束)

创建表

create table Student(
	id int identity(1,1),
	name varchar(50),
	gender char(2),
	age int,
	email varchar(100),
	address varchar(500)
)

alter对表Student的操作

-- 删除表Student中的address列
alter table Student drop column address;
-- 向表Student添加一列
alter table Student add address varchar(300);
-- 修改表中某列数据类型
alter table Student alter column email varchar(201);
-- 为表Student添加主键约束	约束名 PK_Student_id
alter table Student add constraint PK_Student_id primary key(id);
-- 非空约束
alter table Student alter column name varchar(30) not null;
-- 唯一约束
alter table Student add constraint UQ_Student_name unique(name);
-- 默认约束
alter table Student add constraint DF_Student_gender default('男') for gender;
-- 检查约束
alter table Student add constraint Ck_Student_gender check(gender='男' or gender='女');
alter table Student add constraint Ck_Student_age check(age>=18 and age<=24);
-- 添加外键约束	表Student的列classId 映射到表Class 的id列 Student是主表
alter table Student add constraint FK_Student_Class foreign key(classId) references Class(id);
-- 删除约束 FK_Student_Class 是约束名称
alter table Student drop constraint FK_Student_Class;

创建表的时候添加约束
表Class是外键表,Student1是主表

create table Class(
	id int identity(1,1) primary key,
	name varchar(30) not null unique

)
create table Student1(
	id int identity(1,1) primary key,
	name varchar(20) not null unique,
	classId int foreign key references Class(id)
)

1.7 查询数据

普通的select语句
语句分析 先执行form语句在执行select语句

-- 查询表中所有数据
select * from Student;
-- 查询表中指定列的数据
select id,name,gender form Student;
-- 根据条件,只查询表中性别为'女'的数据
select * from Student where gender = '女';
-- 查询结果集中起别名
select id as 编号,name as 名称,gender as 性别 from Student;
-- 起别名的第二种方式
select id 编号,name 名称,gender 性别 from Student;

select语句:distinct和top

-- 去重复查询 distinct关键字针对查询出的结果然后去除重复
select distinct * from Student;

desc和asc

-- 降序排列
select * from Student order by age desc;	
-- 升序排列	默认是升序排列
select * from Student order by age asc;
-- 查询年龄最高的前五名
select  top 5 * from Student order by age desc;
-- 年龄的30% 只要是3.1 就会显示4条数据
select top 30 percent * from Student order by age desc;

1.8 聚合函数

聚合函数包括MAX(最大值)、MIN(最小值)、AVG(平均值)、COUNT(统计)、SUM(总和)

-- 统计所有学生的年龄总和
select sum(age) as 年龄综合 from Student;
-- 统计表中有多少条目数
select count(*) from Student;
-- 计算平均年龄
select 平均年龄=(select sum(age) as 年龄总和 from Student)*1.0/(select count(*) as 总记录数 from Student);
-- 查询年龄最大值和最小值
select max(age) from Student;
select min(age) from Student;
-- 计算平均值 因为age列的类型是int需要转换成浮点数
select avg(age*1.0) from Student;

聚合函数的问题
(1)聚合函数不统计空值
(2)avg()不统计空值,sum()对于null认为是0
(3)如果在使用聚合函数的时候没有使用group by ,聚合函数会把表中的数据认为是一组

1.9 条件查询

-- 查询数学成绩没有及格的学生
select * from Student where mathScore < 60;
-- 查询年龄在20-25之间的女学生
select * from Student where gender = '女' and age >=20 and age <25;
select * from Student where age between 20 and 25 and gender = '女';
-- 查询班级在2,3,4的所有学生
select * from Student where classId int(2,3,4);
select * from Student where classId = 2 or classId=3 or classId = 4;

1.10 模糊查询

通配符
(1)_表示任意的单个字符
(2) % 匹配任意多个字符
(3) [] 表示筛选,范围

-- 查询姓张的2个字的数据
select * from Student where name like '张_';
-- 姓张 三个字的名字
select * from Student where name like '张__';
-- 查询姓张的所有数据
select * from Student where name like '张%';
-- 查询名字中含张的数据
select * from Student where name like '%张%';
-- 查询名字中含a到z字母的数据
select * from Student where name like '张[a-z]牛';
-- 查询名字中包含%的数据
select * from Student where name like '%[%]%';

1.11 null值处理和order by

(1) 使用is null 或is not null 来处理null值
(2) 任何值与null计算结果都是null
(3) – 降序 order by 列名 desc
(4) – 升序 order by 列名 asc

-- 查询所有数据中age含null的
select * from Student where age is null;
-- 查询所有数据中age不是null的
select * from Student where age is not null;
select 10+null;	-- 是null
-- 降序 order by 列名 desc
-- 升序 order by 列名 asc
-- 先按照数学成绩降序排列在按照英语分数降序排列
select * from Student order by mathScore desc,englishScore desc;

1.12 having语句

-- 统计销售总价超过3000元的商品名称和销售总价,并按照销售总价降序排列
select 商品名称,销售价格=sum(销售数量*销售价格) from MyOrders group by 商品名称
having sum(销售数量*销售价格)>3000
order by 销售总价 desc;

2 ADO.NET技术

2.1 测试连接数据库

参考API
(1)SqlConnection 数据库连接对象
(2)SqlCommand 执行SQL语句
(3)SqlDataReader 读取数据
连接数据库

namespace{
	class TestConnection{
		public static void Main(String[] args){
			// 创建连接字符串
			static string conString = "Data Source=KEVINWIN10;Initial Catalog=db_movies;Integrated Security=True"; 
			using(SqlConnection con = new SqlConnection(conString)){
				con.Open();	// 打开连接
				con.Close();	// 关闭连接,释放资源
				}
			Console.WriteLine("测试连接数据库,成功连接!");
		}
	}
}

增删改查操作
注意
(1)ExecuteNonQuery() 这个方法执行insert update delete等语句
(2)ExecuteReader() 这个方法执行select等语句
(3)Execute

using System;
using System.Data.SqlClient;

namespace ConsoleApp1 {
    class Program {

        #region 获取连接对象
        static SqlConnection connection(String conString) {
            SqlConnection con = new SqlConnection(conString);
            return con;
        }
        #endregion
        #region 插入数据
        static void insertData(String insertStr,SqlConnection con) {
            // 创建一个执行SQL语句的对象 SqlCommand
            using(SqlCommand sc = new SqlCommand(insertStr,con)) {
                // 打开数据库连接
                con.Open();
                int number = sc.ExecuteNonQuery();
                Console.WriteLine("成功插入{0}条记录",number);
            }
        }
        #endregion
        #region 删除一条记录
        static void deleteData(String deleteStr,SqlConnection con) {
            SqlCommand sc = new SqlCommand(deleteStr,con);
            con.Open();
            int number = sc.ExecuteNonQuery();

        }
        #endregion
        #region 更新一条记录
        static void updateData(String updateStr,SqlConnection con) {
            using(SqlCommand sc = new SqlCommand(updateStr,con)) {
                con.Open();
                int number = sc.ExecuteNonQuery();
                Console.WriteLine("成功修改了{0}条记录",number);
            }
        }
        #endregion
        #region 查询数据
        static void queryData(string queryS,SqlConnection con) {
            SqlCommand sc = new SqlCommand(queryS,con);
            con.Open();
            SqlDataReader sqr = sc.ExecuteReader();
            while(sqr.Read()) {
                String name = sqr.GetString(2);
                String name1 = sqr["name"].ToString();
                String address = sqr["address"].ToString();
                Console.WriteLine("name is {0},address is {1}",name1,address);
            }
        }
        #endregion
        static void Main(string[] args) {
            string conString = "Data Source=KEVINWIN10;Initial Catalog=db_test;User=sa;Password=123456";
            string insertStr = "insert into tb_Student1 values('张三','男','广东东莞')";
            string deleteStr = "delete from tb_Student1 where id = 1";
            string updateStr = "update tb_Student1 set name = '李四' where id = 2";
            string queryStr = "select * from tb_Student1";
            SqlConnection con = connection(conString);

            //  insertData(insertStr,con);
            // deleteData(deleteStr,con);
            // updateData(updateStr,con);
            queryData(queryStr,con);
            if(con!=null) {
                con.Close();
            }
        }
    }
}

你可能感兴趣的:(代码连接 SQL Server 2017)