目录
第十一章 C#操作数据库基础
(1)什么是数据库
(2)常用名词
(3)常用SQL语句
(4)连接数据库(Connection对象)
(5)添加数据(Command对象)
(6)读取数据(DataReader对象)
(7)DataSet与DataAdapter对象
(8)Entity FrameWork基础
(9)DataGridView控件
(10)LINQ基础
(11)LINQ操作数据库
(12)程序调试
本文主要介绍C#操作数据库以及程序调试。观看的视频教程——C#从入门到精通(第6版)_哔哩哔哩_bilibili
如有时间,推荐观看视频学习。本文主要对其进行总结。
同时分享一下C#的.NET API帮助文档——.NET API browser | Microsoft Learn 包含C#各种命名空间和对象的属性和方法。遇到不会的就在里边找。
第十一章 C#操作数据库基础
(1)什么是数据库
快速存储和查询数据的软件。常用的数据库有MysQL、SQL Server、ORACLE、DB2等。本文使用的数据库是SQL Server。
(2)常用名词
库——database,由表组成。
表——table,由数据组成。
行——row
列——column
数据——value
(3)常用SQL语句
SQL是一种用于数据库操作的结构化查询语言。(所有数据库都使用这种语言)。
SQL语句的特点:不区分大小写、只识别一个空格、可以换行、可以注释、必须用英文符号。
1.创建数据库
create database 库名称。例如:create database test
2.创建数据表
create table 表名(列名1 数据类型,列名2 数据类型,....)。例如:create table tb1(id int, name varchar(50))
3.添加数据
insert into 表名(列名) values(数据)。例如:insert into tb1(id,name) values(1,'张三')
4.查询数据
select 列名 form 表名 (where 列名=查询数据)(这部分是条件查询,查询具体某条语句使用)。全部查询用*号。例如:select * from tb1 where id = 1;(查询id=1的数据)
5.修改数据
update 表名 set 列名 = 修改后数据 (where 列名 = 查询数据)。例如:update ta1 set name = '小王' where id = 1。将id =1的数据中的名字修改为小王。不加条件会修改所有名字。
6. 删除数据
delete from 表名 where 列名 = 要删除的数据。例如:delete from tb1 where id = 1;从表tb1中删除id = 1的数据。
(4)ADO.NET对象模型
是微软.NET数据库的访问架构,它是数据库应用程序和数据源之间沟通的桥梁,提供一个面向对象的数据访问架构,用来开发数据库应用程序。
数据访问命名空间
System.Data——提供对ADO.NET结构的类的访问。
System.Data.Common——包含由各种.NET FrameWork数据提供程序共享的类。
System.Data.Odbb——ODBC.NET FrameWork数据提供程序,描述用来访问托管空间中的ODBC数据源的类集合。
System.Data.SqlClient——SQL服务器.NET FrameWork数据提供程序,描述了用于在托管空间中访问SQL Server数据库的类集合。(本文主要使用这个)
System.Data.SqlTypes——提供SQL Server中本机数据类型的类。
(4)连接数据库(Connection对象)
Connection对象主要用于连接到数据库和管理对数据库的事务。
例如:连接SQL Server数据库
string connectionString = "Server=服务器名;User id =用户;Pwd = 密码;DataBase=数据库名称"。
应用SqlConnection对象连接数据库
using System.Data.SqlClient; //添加命名空间string con_str = "Server=LAPTOP-NV86674K;User id=sa;Pwd=123456;DataBase=test";SqlConnection conn = new SqlConnection(con_str); //创建对象conn.Open(); //打开连接if (conn.State == ConnectionState.Open)label1.Text = "数据库连接开启";conn.Close(); //关闭连接if(conn.State == ConnectionState.Closed)label1.Text = "数据库连接关闭";
(5)添加数据(Command对象)
使用connection对象与数据库建立连接后,可以使用command对象对数据源执行增删改查的操作。实现的方式可以是通过sql语句,也可以是使用存储过程。根据.NET FrameWork提供的程序不同,Command对象可以分为四种。本文主要使用的是SqlCommand对象。
1.通过SQL语句添加数据(常用)
//获取输入的数据int id = Convert.ToInt32(textBox1.Text); string name = textBox2.Text;//创建sql语句string sqlstr = "insert into tb1(id,name) values(@id,@name)";int row = 0;//创建command对象using (SqlCommand cmd = new SqlCommand(sqlstr, conn)){cmd.Parameters.AddWithValue("id", id); //添加参数cmd.Parameters.AddWithValue("name", name);//执行sql语句,返回行数row = cmd.ExecuteNonQuery(); label2.Text = "成功插入" + row + "行数据";}
2.通过存储过程添加数据(需要先在数据库创建存储过程)
using (SqlCommand cmd = new SqlCommand("Insert_tb1", conn)){cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@id", id);cmd.Parameters.AddWithValue("@name", name);cmd.ExecuteNonQuery();label2.Text = "成功插入数据";}
数据库中创建存储过程的脚本
-- 创建插入客户的存储过程
CREATE PROCEDURE Insert_tb1@id int,@name NVARCHAR(50)
AS
BEGIN-- 执行插入INSERT INTO tb1 (id,name)VALUES (@id,@name)END
(6)读取数据(DataReader对象)
DataReader是一个简单的数据集,用于从数据源中读取只读的数据集,常用于检索大量数据。读取数据时,必须与数据库保存连接。
string sqlstr = "select * from tb1 order by id asc";
using (SqlCommand cmd = new SqlCommand(sqlstr,conn)) //创建command对象
{SqlDataReader dr = cmd.ExecuteReader(); //创建datareader对象if (dr.HasRows) //判断是否有数据{while (dr.Read()) //读取下一行{int id = dr.GetInt32(0); string name = dr["name"].ToString();richTextBox1.Text += id+" "+name+"\n";}}dr.Close();
}
(7)DataSet与DataAdapter对象
DataSet对象是ADO.NET的核心成员,是支持ADO.NET断开式、分布式数据方案的核心对象。也是实现基于非连接的数据查询的动态组件。
DataAdapter对象是一种用来充当DataSet对象与实际数据源之间的桥梁的对象。专门为DataSet对象服务。
1.填充DataSet数据集
使用DataAdapter对象填充DataSet数据集,需要使用Fill方法。示例。
string con_str = "Server=LAPTOP-NV86674K;User id=sa;Pwd=123456;DataBase=test";conn = new SqlConnection(con_str);SqlDataAdapter sqlda = new SqlDataAdapter("select * from tb1", conn);DataSet ds = new DataSet();sqlda.Fill(ds, "tb");dataGridView1.DataSource = ds.Tables["tb"];
(8)Entity FrameWork基础
一种基于ADO.NET的ORM框架。
创建实体模型——请参考视频进行操作。
通过EF对数据表进行增删改查操作——参考视频。(提供另一种操作数据库的方法)。
(9)DataGridView控件
数据表格控件,提供一种强大且灵活的方式显示数据。常与数据库搭配使用。具体属性和方法参考开发文档。
(10)LINQ基础
语言集成查询(LINQ),为C#提供强大的查询功能。LINQ引入了标准的、易于学习的查询和更新数据模式,可以对其技术进行扩展以支持几乎所有的数据存储。
1.LINQ查询
2.使用var创建隐式变量
在C#声明变量时,不确定其类型,可以使用关键字var来创建隐式局部变量。根据表达式自动推导变量类型。
3.lambda表达式
lambda表达式是一个匿名函数,包含表达式和语句。所有lambda表达式都是用lambda运算符“=>”。lambda表达式左侧是输入参数。右边包含表达式或语句块。
4.LINQ查询表达式
获取数据源:使用from子句引入数据源和范围变量。例如 var stock = from info in tb1 select info;(从info获取数据源,info从表tb1中查询)
筛选:应用布尔表达式形式的筛选器。筛选只返回true的元素。使用where子句生成结果。例如:var stock = from info in tb1 where info.name=="张三" select info;
排序:主要使用orderby子句进行排序。例如:var stock = from info in tb1 orderby info.id descending(降序) /ascending(升序) select info;
分组:使用group子句按指定键分组结果。
联接:使用join子句根据指定条件相等进行连接。例如 from a in tb1 join b in tb2 on a.id equals b.id select new { //结果集}
选择:select子句生成查询结果并指定返回的类型。
(11)LINQ操作数据库
这部分感兴趣的可以自己看视频。提供另一种操作数据库的方法。需要额外下载LINQ。
(12)程序调试
在程序中查找错误的一个过程。
1.VS调试器调试
断点操作
开始执行
中断执行
停止执行
单步执行和逐过程执行
2.异常处理
处理应用程序可能产生的错误以及可能发生的异常情况。常用Exceopion类以及其子类。
3.try...catch语句
try{object obj = null;int i = (int)obj;}catch(Exception ex){MessageBox.Show(ex.Message);}
4.throw语句
主动引发一个异常。
throw ExObject 例如 throw new DivideByZeroException(); 抛出被除数为0的异常。
5.try...catch...finally语句
特点:当try中的语句发生异常时,执行catch中的异常处理。但仍会执行finally中的语句。示例
string str ="零基础学";int i = 0;try{i = Convert.ToInt32(str);}catch(Exception ex){MessageBox.Show(ex.Message);}finally{MessageBox.Show("程序执行完毕");}
try catch语句中可以包含多个catch
本章总结内容到此结束,详细内容请看视频学习。