1.学好ADO.NET课程的收获
1.1掌握C#访问数据库的基本方法,如连接和断开数据库
1.2掌握数据查询的各种方法,如增删改查
1.3重点理解和掌握OOP原则在数据访问种的应用,如写通用读写类的意义
1.4重点理解和掌握基于OOP查询与对象封装,查询使用的最多
2.MIS系统部署方案
2.1完整的应用程序包括客户端和数据库服务端
2.1.1安装了程序的客户端,C/S架构,可能有多个
2.1.2数据库服务端,如SQLServer、Oracle、MySql
2.1.3AQO.NET就是连接客户端和服务端的一种数据库访问技术
2.2理解ADO.NET
2.2.1AxtiveX Data Objects(ADO)
2.2.2是.NET平台下应用程序和数据源进行交互的一组面向对象类库。这里的数据源不仅仅指数据库,可以能是excel、ini、txt等数据文件
2.2.3简单理解就是——>>>数据访问组件
3.ADO.NET主要组件
主要由两部分组成
3.1.NET数据提供程序:用于连接到数据库、执行命令和检索结果。
主要有四大对象
3.1.1Connection对象:负责连接数据库
3.1.2Command对象:负责对数据源执行命令
3.1.3DataReader对象:从数据源种读取只进且只读的数据流
3.1.4DataAdapter对象:用数据源填充DataSet并解析更新
3.2DataSet内存数据集
DataSet:独立与任何数据源,不必直接和数据库交互
4..NET Framework数据提供程序
访问不同数据库需要有不同的访问对象
.NET Framework数据提供程序有以下
SQL Server数据库——>>>System.Data.SqlClient
Access、Excel或SQLServer数据源——>>>System.Data.OleDb
5.连接数据库的准备工作
需要SQLServer服务器端口查看与修改
打开软件SQL Server配置管理器——>>>确保MSSQLSERVER协议的TCP/IP启用,确定好端口号(默认1433)
6.正确的连接服务器
四个条件:服务器IP地址、数据库名称、登陆账号、登陆密码
一个必要:ADO.NET组件
7.Conncetion对象
7.1作用:建立应用程序和数据库的点与点连接
7.2属性:ConnectionString(连接字符串)
封装连接字符串的四个条件
Server=服务器名称或IP地址;DataBase=数据库名称;User ID=登陆账号;PassWord=登陆密码
使用SQLServer用户验证登陆的字符串示例(经常使用):Server=192.168.1.2;DataBase=StudentManageDB;Uid=xiaoyang;Pwd=pwd01!
使用windows集成验证登录的字符串示例(仅限于本机):Data Source=.;Initial Catalog=StudentManageDB;Intergrated Security=True
string conString="Server=wxj\\SQLExpress;DataBase=StudentManageDB;Uid=xiaoYang;Pwd=pwd01!"; string conString=@"Server=wxj\SQLExpress;DataBase=StudentManageDB;Uid=xiaoYang;Pwd=pwd01!";
【注意1】数据库命名实例要写完整
【注意2】注意使用“\\”或者字符串前面加“@”。C#不识别单个的“\“
【注意3】如果是默认实例,则可以用”.“或”localhost“代替服务器名称或ip地址
7.3方法
Open(); //打开连接
Close(); //关闭连接
//【1】引入命名空间 using System.Data; using System.Data.SqlClient; namespace _024ADONET { class Program { static void Main(string[] args) { //【2】定义连接字符串 string connectionString = "Server=.;DataBase=BOE1;Uid=sa;Pwd=222"; //【3】创建连接对象 SqlConnection conn = new SqlConnection(connectionString); //【4】打开连接 conn.Open(); if (conn.State==ConnectionState.Open) { Console.WriteLine("Connection is Opened!"); } //【5】关闭连接 conn.Close(); if (conn.State==ConnectionState.Closed) { Console.WriteLine("Connection is Closed!"); } Console.ReadLine(); } } }
8.Command对象
8.1作用:向数据库发送SQL语句
封装“连接对象”和要执行的“SQL语句”
对数据库执行具体的操作,提供“增、删、改、查”的方法
8.2属性
CommandText:需要封装的sql语句和存储过程名称
Connection:Command对象使用的数据库连接对象
8.3方法
ExecuteNonQuery(); //执行增、删、改操作 【int型】
ExecuteScalar(); //返回单一结果的查询 【object型】
ExecuteReader(); //返回只读数据列表的查询
8.4ExecuteNonQuery()方法使用要点
执行insert、update、delete类型的语句
执行后返回受影响的行数,一般是大于0的整数,等于0说明没有影响,等于-1说明语法错误
8.5C#调试SQL语句,可以打断点,可视化字符串,复制到SQL Server中
1 //【1】引入命名空间 2 using System.Data; 3 using System.Data.SqlClient; 4 namespace _024ADONET 5 { 6 class Program 7 { 8 static void Main(string[] args) 9 { 10 //【2】定义连接字符串 11 string connectionString = "Server=.;DataBase=StudentManageDB;Uid=sa;Pwd=1001"; 12 //【3】创建连接对象 13 SqlConnection conn = new SqlConnection(connectionString); 14 //【4】打开连接 15 conn.Open(); 16 if (conn.State==ConnectionState.Open) 17 { 18 Console.WriteLine("Connection is Opened!"); 19 } 20 //cmd对象 21 SqlCommand cmd = new SqlCommand(); 22 cmd.Connection = conn; 23 //执行【插入一条语句】 24 string sql = $"insert into Students(StudentName,Gender,Birthday,StudentIdNo,Age,PhoneNumber,StudentAddress,ClassId)" + 25 $"values(‘{"王洛一"}‘,‘{"男"}‘,‘{"1993-8-16"}‘,{4103251987756789},{22},‘{"15234567890"}‘,‘{"苏州"}‘,{2})"; 26 //创建Command对象 27 cmd.CommandText = sql; 28 int result = cmd.ExecuteNonQuery(); 29 if (result == 1) 30 { 31 Console.WriteLine("添加成功"); 32 } 33 else 34 { 35 Console.WriteLine("添加失败"); 36 } 37 //执行【修改一个实体】 38 string sql1 = $"update Students set StudentName=‘{"刘伟一"}‘,Age=23 where StudentName=‘{"王洛一"}‘"; 39 cmd.CommandText = sql1; 40 int result1 = cmd.ExecuteNonQuery(); 41 if (result1 == 1) 42 { 43 Console.WriteLine("修改成功"); 44 } 45 else 46 { 47 Console.WriteLine("修改失败"); 48 } 49 //执行【删除一个实体】 50 string sql2 = $"delete from Students where StudentName=‘{"刘伟一"}‘"; 51 cmd.CommandText = sql2; 52 int result2 = cmd.ExecuteNonQuery(); 53 if (result2 == 1) 54 { 55 Console.WriteLine("删除成功"); 56 } 57 else 58 { 59 Console.WriteLine("删除失败"); 60 } 61 //执行【一次插入多条sql语句】 62 string sql_1 = $"insert into Students(StudentName,Gender,Birthday,StudentIdNo,Age,PhoneNumber,StudentAddress,ClassId)" + 63 $"values(‘{"王洛2"}‘,‘{"男"}‘,‘{"1993-8-16"}‘,{4103251387756789},{22},‘{"15234567890"}‘,‘{"苏州"}‘,{2})"; 64 string sql_2 = $"insert into Students(StudentName,Gender,Birthday,StudentIdNo,Age,PhoneNumber,StudentAddress,ClassId)" + 65 $"values(‘{"王洛3"}‘,‘{"男"}‘,‘{"1993-8-16"}‘,{4103251487756789},{22},‘{"15234567890"}‘,‘{"苏州"}‘,{2})"; 66 string sql_3 = $"insert into Students(StudentName,Gender,Birthday,StudentIdNo,Age,PhoneNumber,StudentAddress,ClassId)" + 67 $"values(‘{"王洛4"}‘,‘{"男"}‘,‘{"1993-8-16"}‘,{4103251587756789},{22},‘{"15234567890"}‘,‘{"苏州"}‘,{2})"; 68 string manySql = sql_1 + ";" + sql_2 + ";" + sql_3; 69 cmd.CommandText = manySql; 70 int result4 = cmd.ExecuteNonQuery(); 71 Console.WriteLine($"插入{result4}成功"); 72 //【5】关闭连接 73 conn.Close(); 74 if (conn.State==ConnectionState.Closed) 75 { 76 Console.WriteLine("Connection is Closed!"); 77 } 78 Console.ReadLine(); 79 } 80 } 81 }
//执行【一次插入多条sql语句】 string sql_1 = $"insert into Students(StudentName,Gender,Birthday,StudentIdNo,Age,PhoneNumber,StudentAddress,ClassId)" + $"values(‘{"王洛5"}‘,‘{"男"}‘,‘{"1993-8-16"}‘,{4103251387756789},{22},‘{"15234567890"}‘,‘{"苏州"}‘,{2})"; string sql_2 = $"insert into Students(StudentName,Gender,Birthday,StudentIdNo,Age,PhoneNumber,StudentAddress,ClassId)" + $"values(‘{"王洛6"}‘,‘{"男"}‘,‘{"1993-8-16"}‘,{4103251487756789},{22},‘{"15234567890"}‘,‘{"苏州"}‘,{2})"; string sql_3 = $"insert into Students(StudentName,Gender,Birthday,StudentIdNo,Age,PhoneNumber,StudentAddress,ClassId)" + $"values(‘{"王洛7"}‘,‘{"男"}‘,‘{"1993-8-16"}‘,{4103251587756789},{22},‘{"15234567890"}‘,‘{"苏州"}‘,{2})"; string manySql = sql_1 + ";" + sql_2 + ";" + sql_3; cmd.CommandText = manySql; int result4 = cmd.ExecuteNonQuery(); Console.WriteLine($"插入{result4}条实体成功");
9.获取标识列
9.1问题引出
在Students表中添加一个新的学员对象,并返回新增学员的学号
提示:学号是自动表示列,即插入新纪录以后返回该记录的标识列
9.2问题解决
在insert语句后面添加select @@identity查询
在执行ExecuteScalar()方法,同时执行insert和select
9.3示例
insert into Students(StudentName,Gender,Birthday,Age,StudentIdNo,PhoneNumber,StudentAddress,ClassId)values(‘王二‘,‘男‘,‘1989-9-8‘,22,12342211,‘15676545678‘,‘河南‘,1,); select @@Identity
9.4说明
@@identity是数据库中的一个全局变量,里面保存着最近一次生成的标识列的值
string sql = $"insert into Students(StudentName,Gender,Birthday,StudentIdNo,Age,PhoneNumber,StudentAddress,ClassId)" + $"values(‘{"王洛一"}‘,‘{"男"}‘,‘{"1993-8-16"}‘,{4103251956789},{22},‘{"15234567890"}‘,‘{"苏州"}‘,{2})"; //创建Command对象 cmd.CommandText = sql+";select @@identity"; object re = cmd.ExecuteScalar();
10.执行增、删、改步骤总结
原文:https://www.cnblogs.com/yangmengke2018/p/11619875.html