C#从入门到精通(4)

发布于:2025-03-31 ⋅ 阅读:(25) ⋅ 点赞:(0)

目录

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

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


网站公告

今日签到

点亮在社区的每一天
去签到