C#从入门到精通(4)

ops/2025/4/2 6:47:48/

目录

第十一章 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

        本章总结内容到此结束,详细内容请看视频学习。


http://www.ppmy.cn/ops/171313.html

相关文章

通俗易懂的大模型原理

十分钟揭秘DeepSeek原理,通俗易懂的大语言模型科普!_哔哩哔哩_bilibili 最基础原理,x是输入,y是输出。上百万和上百亿的参数 将一句话转化为数字向量 一句话就是向量矩阵 输入矩阵和参数矩阵进行计算得出输出矩阵,因为…

基于核选择融合注意力机制TCN-MTLATTENTION-MAMBA模型(Python\matlab代码)

首先声明,该模型为原创!原创!原创!且该思路还未有成果发表,感兴趣的小伙伴可以借鉴!需要完整代码可私信或评论! 本方案可用于医疗、金融、交通、零售、光伏功率预测、故障检测等领域! 目录 首先声明,该模型为原创!原创!原创!且该思路还未有成果发表,感兴趣的小伙…

JVM动态代理和JDK动态代理介绍

目录 主要区别 概念范围 实现方式 使用场景 性能考虑 JDK动态代理介绍 实现步骤 1. 定义接口 2. 实现目标对象 3. 实现InvocationHandler接口 4. 创建代理对象 执行流程 1. 创建代理对象 2. 方法调用拦截 3. 执行额外逻辑 4. 调用目标方法 应用场景 1. 面向切…

独享动态IP有什么用?它的优势解析

在互联网技术飞速发展的今天,IP地址是维护网络正常运作的关键资源。与共享IP相比,独享动态IP为用户提供了更多的优势,无论是个人还是企业使用,都能受益良多。 独享动态IP:是指用户独占一个IP地址,该IP地址…

docker无法拉取镜像问题

1、直接在服务器上创建这个文件,将镜像源配置在里面 /etc/docker/daemon.json {"registry-mirrors": ["https://do.nark.eu.org","https://dc.j8.work","https://docker.m.daocloud.io","https://dockerproxy.com&qu…

Linux MariaDB部署

1:查看Linux系统版本 cat /etc/os-release#返回结果: NAME"CentOS Linux" VERSION"7 (Core)" ID"centos" ID_LIKE"rhel fedora" VERSION_ID"7" PRETTY_NAME"CentOS Linux 7 (Core)" ANSI…

Trae-中国首款免费AI原生IDE

Trae 简介 Trae 是由字节跳动于2025年1月推出的国内首个原生AI集成开发环境(IDE),旨在通过AI技术赋能开发者,简化编程流程。其核心功能基于Claude 3.5和GPT-4o等先进AI模型,支持智能代码生成、优化及多模态交互&#…

Stereolabs ZED Box Mini:机器人与自动化领域的人工智能视觉新选择

在人工智能视觉技术快速发展的今天,其应用场景正在持续拓宽,从智能安防到工业自动化,从机器人技术到智能交通,各领域都在积极探索如何利用这一先进技术。而 Stereolabs 推出的ZED Box Mini,正是一款专为满足这些多样化…