当前位置: 代码迷 >> 综合 >> 《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET
  详细解决方案

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

热度:72   发布时间:2023-10-01 12:37:00.0

11.1 数据库的基本概念

11.1.1  数据管理技术的发展阶段

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

11.1.2 数据库的基本术语

数据库

所谓数据库就是按照一定的数据模型组织、存储在一起的,能为多个用户共享的、与应用程序相对独立、相互关联的数据集合。

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

数据库管理系统

帮助用户建立和管理数据库的软件系统称为数据库管理系统

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

11.2 建立Access数据库

Access一般应用于小型的网站系统和一般性的数据存储,比如数据量不大的网站、论坛、留言本,虽然它在性能上没有SQL SERVER,mysql等数据库优秀,但它也具备了所有数据库的特点,基本上能够满足我们的需要。

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

11.2.1 规划数据库

尽量使数据库设计合理。既包含必要的信息,又能节省数据的存储空间。

主要是规划每一个表的字段和字段类型,不要有冗余。

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

11.2.2 新建一个数据库

依次选择菜单命令【开始】、【程序】、【Microsoft access】就可以启动Access2003。

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

11.2.3 新建和维护表

关于字段的注意事项

1、可以字母、数字或下划线。

2、不要使用关键字,比如password、user、from、select等在ASP.NET语法中会用到的词。

在表中输入数据

在主窗口中双击表名,就可以打开输入窗口。

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

11.2.4 新建和维护查询

利用查询可以更方便的更改分析和处理数据。查询就好比是一张虚拟的表一样,用户可以像在表里操作一样,输入数据或浏览数据。

查询有很几种:简单查询、组合查询、计算查询和条件查询。现在就来建立一个简单查询,只显示学号和姓名两个字段的内容。

新建简单查询

在Access主窗口左侧选择”查询”按钮。

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

显示查询内容

在主窗口中双击查询名称。

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

利用SQL语言建立查询

当进行左图时,直接单击【关闭】按钮,然后在主窗口中依次选择【视图】、【SQL视图】菜单命令,就会出现”SQL视图”对话框。

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

11.3 SQL语言简介

1.Select语句      查询数据

2.Insert语句      添加记录

3.Delete语句     删除记录

4.Update语句    更新记录

11.3.1 Select语句

可以使用Select语句来取得满足特定条件的记录集。也就是说可以从数据库中查询有关记录。

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

语法:

Select [Top(数值)] 字段列表 From 表 [Where 条件] [Order By 字段]

Select语句示例

(1)选取全部数据

Select * From tbl_Student

(2)选取指定字段的数据

Select Sno,Sname From tbl_Student

(3)选取满足指定条件的字段

     Select * From tbl_Student Where Sage>19Select * From tbl_Student Where Sname="张良"Select * From tbl_student Where Sage>19 and Ssex="男“ 

(4)查询结果排序

     Select * From tbl_Student Order By age ASC    Select * From stu_info Order By age DESC

(5)选取前若干条记录

     Select Top 3 * From tbl_Student

(6)用表中原有字段产生派生字段

     select  Sno as 学号, Sname as 姓名, Ssex as 性别 from tbl_Studentselect  Sno as 学号, Sname as 姓名, Ssex as 性别, Sage+10 as 年龄 from tbl_Student

(7)模糊查询

     select * from tbl_Student where Sname like "*行*"

*:代表任意字符

:代表某一字符

11.3.2 Insert语句

向用户表tbl_Student中增加新成员时,就需要将新用户的数据插入到表tbl_Student中。此时,可以使用SQL语言中的Insert语句来实现这个功能。

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

语法:

Insert  Into  表(字段1,字段2,…)  Values (字段1的值,字段2的值,…)

Insert语句示例

(1)只插入部分字段

      Insert into tbl_Student(Sno,Sname) values("11000006","罗修")

(2)插入全部字段

     Insert into tbl_Student(Sno,Sname,Ssex,Sage,Sdept) values("11000007","王珊","女",20,"软件工程")Insert into tbl_Student values("11000007","王珊","女",20,"软件工程")

11.3.3 Update语句

可以使用Update语句来实现更新数据的功能。

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

语法:

Update 数据表名 Set 字段1=字段值1,字段2=字段值2,… [Where 条件]

Update语句示例

    Update tbl_Student set Sage=22 where Sname="张良"Update tbl_Student set Sage=Sage+1

11.3.4 Delete语句

在SQL语言中,可以使用Delete语句来删除表中无用的记录。

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

语法:

Delete From 表 [Where 条件]

Delete语句示例 

(1)删除满足条件的记录

        Delete from tbl_Student where Sname="张良"

(2)删除表中所有记录

        Delete From tbl_Student

练习

(1)建立baseinfo表

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

(2)完成满足以下条件的SQL语句

查询baseinfo表中的所有信息

    Select * From baseinfo

只查询baseinfo表中的name和native字段

    Select name,native From baseinfo

查询baseinfo表中满足native是“黑龙江”的所有记录

    Select * From baseinfo Where native=“黑龙江”

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

查询baseinfo表中满足specilty是“信息”并且class是“11-1”的所有记录

     Select * From baseinfo Where specialty=”信息” and class=”11-1”

向baseinfo表中插入一条新的字段,其id为8,name为”陈斌”,specialty为”信管”,class为”12-2”,native为”吉林”

      Insert Into baseinfo(id,name,specialty,class,native) Values(8,”陈斌”,”信管”,”12-2”,”吉林”)

在baseinfo表中将class字段中值为”11-1”的字段均改为”12-1”

    Update baseinfo Set class=“12-1” where class=“11-1”

在baseinfo表中删除id值为7的字段

     Delete From baseinfo where id=7

作业

建立学生选课系统数据库(SelectCourse)中包含的四张表。用户信息“tbl_User”、学生信息“tbl_Student”、课程信息“tbl_Course”和选课信息“tbl_SC”四个数据表。表的结构、表字段的数据类型及相关说明如下:

1. 系统用户表:系统用户表“tbl_User”用于存放系统用户的相关数据。

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

2. 学生信息表:学生信息表“tbl_Student”用于存放学生的基础信息。

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

3. 课程信息表:学生信息表“tbl_Course”用于存放课程的基础信息。

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

4. 选课信息表:选课信息表“tbl_SC”用于存放学生的选课信息。

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

11.4 ADO.NET与数据库概述

ADO.NET是一组允许基于.NET的应用程序访问数据库以便读取和更新信息的类,要使用这些类需要引用System.Data命名空间。它以 ActiveX 数据对象 (ADO) 为基础以 XML(扩展标记语言)为格式传送和接收数据访问数据存储无需连接

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

ADO.NET是.NET Framework的重要组成部分,使用ADO.NET可以很方便的访问数据库。ADO.NET是数据库应用程序和数据源沟通的桥梁,主要提供一个面向对象的数据存储结构,用来开发数据库应用程序。

ADO.NET的架构主要是希望能够在做处理数据的同时,不要一直和数据库联机,而导致一直占用系统资源的现象发生。为了解决此问题,ADO.NET将存取数据数据处理分开,达到离线存取数据的目的,使得数据库能够执行其他操作。因此将ADO.NET中的类大概分为.NET数据提供者对象用户对象两种。

11.5 ADO.NET类和对象概述

 .NET数据提供者对象

.NET数据提供者对象专用于每一种类型的数据源,专用于提供者的用户对象完成在数据源中实际的读取和写入工作。.NET数据提供者对象中要求活动的连接。

用户对象

用户对象是将数据读入到内存中后用来访问和操作数据的对象。用户对象以非连接方式使用。在数据库关闭之后也可以使用内存中的数据。

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

数据库访问的方式有两种:一种是直接数据访问,另外一种是不连接数据访问。

直接数据访问是一种最容易的访问数据库的方式,使用直接数据访问时,并不需要在内存中保存信息的副本。相反,当数据库连接打开后可以在一段较短时间内维持同数据库的交互,然后数据库就会迅速关闭。

不连接的数据访问将会在内存中的DataSet对象中保存数据的副本,在数据库连接断开后仍然能够操作这些数据。

ADO.NET操作数据库的示意图

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

.NET数据提供者对象

常用的. NET数据提供者对象分为以下4种:

  • SQL Server数据源提供程序:位于System.Data.SqlClient,适用于Sql Servers数据库7.0或以上版本。
  • OLE DB数据源提供程序:位于System.Data.OleDb,用于连接可通过OLE DB提供程序访问的任何数据源,如access
  • ORACLE数据源提供数据:位于System.Data.OracleClient,适用于Oracle数据库。
  • ODBC数据源提供程序:位于System.Data.Odbc,允许通过ODBC驱动程序管理器来访问数据。

.NET数据提供者对象包括Connection、Command、DataReader和DataAdapter这4个对象。

.NET数据提供者对象——Connection对象:

Connection对象表示与数据源之间的连接。可用它来与数据库建立连接或断开连接。

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

连接数据库步骤:

1、定义连接字符串

string strcon = @"Provider = Microsoft.Jet.OLEDB.4.0;" + @"Data Source=D:\mydb.mdb";

2、创建 Connection 对象

OleDbConnection myconn = new OleDbConnection(strcon);

3、打开与数据库的连接

myconn.open();

4、关闭与数据库的连接

myconn.close();

.NET数据提供者对象

  • Command对象:指定数据库执行的操作。命令包含向数据库提交的信息,并且由OleDbCommand等特定于提供程序的类来实现。
  • DataReader对象:DataReader对象只能从数据库中正向读取记录,用于代替DataSet对象。不能用DataReader对象修改数据库中的行。
  • DataAdapter对象:用来从数据库中读取数据,并送到DataSet对象中,还要负责保证DataSet对象中的数据和数据库中的数据保持一致。

用户对象

一般性的数据类对象可以为数据库中的信息存储一个本地拷贝,从而可以在切断数据库连接时处理这个信息。

DataSet对象:它可以看作是内存中的数据库。利用DataAdapter对象将数据库中的数据送到该对象中,然后就可以在其中对数据进行各种操作,最后再利用DataAdapter对象将更新反映到数据库中。

为什么使用 DataSet 对象?

  • 大批量的查询、修改数据怎么办?
  • 想在断开数据库连接的情况下操所数据怎么办?

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

什么是 DataSet 对象?

DataSet 数据集

  • 简单理解为一个临时数据库
  • 将数据源的数据保存在内存中
  • 独立于任何数据库

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

数据集的工作原理

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

如何创建 DataSet 对象

语法:

DataSet 数据集对象 = new DataSet();

示例:

DataSet mydataset = new DataSet();

为什么使用 DataAdapter

如何将数据库的数据放在 DataSet 中?

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

如何填充数据集

使用 DataAdapter 对象填充数据集

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

填充数据集

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

11.6 DataGridView控件的使用

怎样显示 DataSet 中的数据呢?

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

DataSource:DataGridView 的数据源

11.7 ADO.NET基本数据库编程

常用的数据库编程包括连接数据库、插入新的数据、删除数据和修改数据,即执行SQL语法中的Insert、Delete、 Update语句。

连接并显示数据库中的全部信息:

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

private void btnSel_Click(object sender, EventArgs e){try{string strcon = @"Provider=Microsoft.Jet.OLEDB.4.0;" + @"Data Source=..\SelectCourse.mdb"; //创建数据库连接字符串    //连接数据库              OleDbConnection myconn = new OleDbConnection(strcon); 
myconn.Open(); //打开数据库的连接string mysql = "select * from tbl_Student"; //查询SQL语句//创建Adapter对象OleDbDataAdapter mydataAdapeter = new OleDbDataAdapter(mysql, myconn);          DataSet mydataset = new DataSet(); //创建数据集//使用Adapter对象填充数据集mydataAdapeter.Fill(mydataset, "cx");//将数据集中的内容绑定到DataGridView控件dgrdvStudent.DataSource = mydataset.Tables["cx"];SetHeaderText(); //设置列标题          myconn.Close(); //关闭数据库的连接}catch (Exception ex){  MessageBox.Show(ex.Message);  }}

更改DataGridView数据控件的列标题显示:

为了将DataGridView数据控件(dgrdvStudent)中显示的学生信息具有更好的表达效果,将各列的标题改成相应的中文。因此编写SetHeaderText()方法,然后在修改dgrdvStudent控件的DataSource属性后立即调用此方法,已达到修改列标题的效果,代码如下:

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

        //更改列标题void SetHeaderText(){dgrdvStudent.Columns[0].HeaderText = "学号";dgrdvStudent.Columns[1].HeaderText = "姓名";dgrdvStudent.Columns[2].HeaderText = "性别";dgrdvStudent.Columns[3].HeaderText = "年龄";dgrdvStudent.Columns[4].HeaderText = "所在系";}

按学号查询学生信息:

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

private void button1_Click(object sender, EventArgs e) //按学号查询
{if (txtNo.Text == ""){  MessageBox.Show("请输入学生的学号!");  }else{  try{  //创建数据库连接字符串string strcon = @"Provider=Microsoft.Jet.OLEDB.4.0;" + @"Data Source=..\SelectCourse.mdb";           OleDbConnection myconn = new OleDbConnection(strcon); //连接数据库                    myconn.Open(); //打开数据库的连接string mysql = "select * from tbl_Student where Sno='" + txtNo.Text.Trim() + "'"; //查询SQL语句          //创建Adapter对象OleDbDataAdapter mydataAdapeter = new OleDbDataAdapter(mysql, myconn);                    DataSet mydataset = new DataSet(); //创建数据集                    mydataAdapeter.Fill(mydataset, "cx"); //使用Adapter对象填充数据集if (mydataset.Tables["cx"].Rows.Count == 0){  MessageBox.Show("该学号没有学生记录!");   }else{//将数据集中的内容绑定到DataGridView控件dgrdvStudent.DataSource = mydataset.Tables["cx"];SetHeaderText();      }                        myconn.Close (); //关闭数据库的连接             }catch (Exception ex){    MessageBox.Show(ex.Message);    }} 
}

Command 对象

Command对象可以使用数据命令直接与数据源进行通信。例如,当需要执行一条插入语句,或者删除数据库中的某条数据的时候,就需要使用到Command对象。Command对象的属性包括了数据库在执行某个语句的所有必要的信息。

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

ExecuteNonQuery方法:

ExecuteNonQuery方法用来执行Insert、Update、Delete和其他没有返回结果集的SQL语句,并返回执行命令后影响的行数。

插入学生信息:

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

private void btnAdd_Click(object sender, EventArgs e) //添加学生信息
{  if (txtNo.Text == "" || txtName.Text == "" || txtAge.Text == "" || txtDept.Text == "" || cmbSex.Text == ""){  MessageBox.Show("插入信息不完整!");      }else{  try{   string strcon = @"Provider=Microsoft.Jet.OLEDB.4.0;" + @"Data Source=..\SelectCourse.mdb";OleDbConnection myconn = new OleDbConnection(strcon);myconn.Open();string mysql = "insert into tbl_Student values ('" + txtNo.Text.Trim() + "','" + txtName.Text.Trim() + "','" + cmbSex.Text.Trim() + "','" + txtAge.Text.Trim() + "','" + txtDept.Text.Trim() + "')";OleDbCommand mycommand = myconn.CreateCommand();mycommand.CommandText = mysql;mycommand.ExecuteNonQuery();mysql = "select * from tbl_Student";OleDbDataAdapter mydataAdapeter = new OleDbDataAdapter(mysql, myconn);DataSet mydataset = new DataSet();mydataAdapeter.Fill(mydataset, "cx");dgrdvStudent.DataSource = mydataset.Tables["cx"];SetHeaderText();myconn.Close();       }catch (Exception ex){    MessageBox.Show(ex.Message);         }}   
}

修改学生信息:

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

将DataGridView控件中的内容与展示控件相关联:

//将DataGridView控件中的内容与展示控件相关联
private void dgrdvStudent_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{int n = dgrdvStudent.CurrentCell.RowIndex;txtNo.Text = dgrdvStudent[0, n].Value.ToString();txtName.Text = dgrdvStudent[1, n].Value.ToString();cmbSex.Text = dgrdvStudent[2, n].Value.ToString();txtAge.Text = dgrdvStudent[3, n].Value.ToString();                txtDept.Text = dgrdvStudent[4, n].Value.ToString();
}

修改学生信息:

 private void btnUpdate_Click(object sender, EventArgs e)
{try{string strcon = @"Provider=Microsoft.Jet.OLEDB.4.0;" + @"Data Source=..\SelectCourse.mdb";OleDbConnection myconn = new OleDbConnection(strcon);                     string mysql = "Update tbl_Student set Sname='" + txtName.Text.Trim() + "',Ssex='" + cmbSex.Text.Trim() + "',Sage='" + txtAge.Text.Trim() + "',Sdept='" + txtDept.Text.Trim() + "' where Sno='" + txtNo.Text.Trim() + "'";OleDbCommand mycommand = myconn.CreateCommand();mycommand.CommandText = mysql;myconn.Open();mycommand.ExecuteNonQuery();mysql = "select * from tbl_Student";OleDbDataAdapter mydataAdapeter = new OleDbDataAdapter(mysql, myconn);DataSet mydataset = new DataSet();mydataAdapeter.Fill(mydataset, "cx");myconn.Close();dgrdvStudent.DataSource = mydataset.Tables["cx"];  }catch (Exception ex){MessageBox.Show(ex.Message);}                     }

删除学生信息:

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

 private void btnDelete_Click(object sender, EventArgs e)
{try{                string strcon = @"Provider=Microsoft.Jet.OLEDB.4.0;" + @"Data Source=..\SelectCourse.mdb";OleDbConnection myconn = new OleDbConnection(strcon);                myconn.Open();string mysql = "delete * from tbl_Student where Sno='" + txtNo.Text.Trim() + "'";OleDbCommand mycommand = myconn.CreateCommand();mycommand.CommandText = mysql;mycommand.ExecuteNonQuery();mysql = "select * from tbl_Student";OleDbDataAdapter mydataAdapeter = new OleDbDataAdapter(mysql, myconn);DataSet mydataset = new DataSet();mydataAdapeter.Fill(mydataset, "cx");dgrdvStudent.DataSource = mydataset.Tables["cx"];SetHeaderText();myconn.Close();}catch (Exception ex){MessageBox.Show(ex.Message);}
}

退出:

 private void btnClose_Click(object sender, EventArgs e)
{Application.Exit();
}

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

《Visual C# 程序设计》课程学习(11)——第11章 C#数据库编程与ADO.NET

 

  相关解决方案