C#从入门到精通(4)

目录

第十一章 C#操作数据库基础

(1)什么是数据库

(2)常用名词

(3)常用SQL语句

(4)连接数据库(Connection对象)

(5)添加数据(Command对象)

(6)读取数据(DataReader对象)

(7)DataSet与DataAdapter对象

[(8)Entity FrameWork基础](#(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的数据中的名字修改为小王。不加条件会修改所有名字。

  1. 删除数据

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对象连接数据库

cs 复制代码
  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语句添加数据(常用)

cs 复制代码
  //获取输入的数据
  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.通过存储过程添加数据(需要先在数据库创建存储过程)

cs 复制代码
   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 = "成功插入数据";
   }

数据库中创建存储过程的脚本

cs 复制代码
-- 创建插入客户的存储过程
CREATE PROCEDURE Insert_tb1
    @id int,
    @name NVARCHAR(50)
AS
BEGIN
    
    -- 执行插入
    INSERT INTO tb1 (id,name)
    VALUES (@id,@name)

END
(6)读取数据(DataReader对象)

DataReader是一个简单的数据集,用于从数据源中读取只读的数据集,常用于检索大量数据。读取数据时,必须与数据库保存连接。

cs 复制代码
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方法。示例。

cs 复制代码
 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语句

cs 复制代码
 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中的语句。示例

cs 复制代码
 string str ="零基础学";
 int i = 0;
 try
 {
     i = Convert.ToInt32(str);
 }
 catch(Exception ex)
 {
     MessageBox.Show(ex.Message);
 }
 finally
 {
     MessageBox.Show("程序执行完毕");
 }

try catch语句中可以包含多个catch

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

相关推荐
光军oi1 小时前
Mysql从入门到精通day5————子查询精讲
android·数据库·mysql
qr9j422333 小时前
Django自带的Admin后台中如何获取当前登录用户
数据库·django·sqlite
cherry52303 小时前
【PostgreSQL】【第4章】PostgreSQL的事务
数据库·postgresql
勘察加熊人4 小时前
wpf+c#路径迷宫鼠标绘制
开发语言·c#·wpf
小黄人软件5 小时前
C# ini文件全自动界面配置:打开界面时读ini配置到界面各控件,界面上的控件根据ini文件内容自动生成,点保存时把界面各控件的值写到ini里。
开发语言·c#
IT成长日记7 小时前
【MySQL基础】聚合函数从基础使用到高级分组过滤
数据库·mysql·聚合函数
Guarding and trust8 小时前
python系统之综合案例:用python打造智能诗词生成助手
服务器·数据库·python
夜间出没的AGUI8 小时前
SQLiteBrowser 的详细说明,内容结构清晰,涵盖核心功能、使用场景及实用技巧
数据库
不再幻想,脚踏实地9 小时前
MySQL(一)
java·数据库·mysql