C#(Sharp)操作数据库原理及案例精析(强烈建议收藏)
Posted 刘一哥GIS
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#(Sharp)操作数据库原理及案例精析(强烈建议收藏)相关的知识,希望对你有一定的参考价值。
刘一哥C#从入门到精通系列精品教程合集:
1.【C#程序设计】教学讲义——第一章:C#语言概述
2.【C#程序设计】教学讲义——第二章:简单C#程序设计
3.【C#程序设计】教学讲义——第三章:C#语言基础
4.吐血整理:C#顺序、选择、循环结构用法与案例,这一篇就够了!
5.C#数组原来这么简单,你学废了吗?
6.不会C# Winform用户界面设计?是因为没有掌握这些控件(建议收藏)
7.学弟学妹们,C#为啥学不好?是因为你没真正理解面向对象的思想!
8. C#(Sharp)进阶篇:文件操作
9.C#(Sharp)GDI plus与图形编程(计算机图形学必备知识)
文章目录
数据库应用
人类已经进入信息社会,而社会的信息量正以惊人的速度增长,信息已成为重要的资源和财富。对企业或各种组织来说,为适应信息社会,建立一个行之有效的信息系统,已成为其生存和发展的重要条件。数据库技术作为信息系统的基础和核心技术,正在得到越来越广泛的应用。
C# .NET提供了功能强大的数据库处理能力,将Windows的各种先进特征与强大的数据库管理功能有机的结合在一起。 C#语言中对数据库的访问是通过.NET框架中的ADO.NET来实现的,ADO.NET是重要的应用程序级接口。 本章介绍有关数据库的基本概念、ADO.NET基础和SQL语句的使用。
10.1 数据库基本概念
10.1.1 数据库系统简介
数据库系统(DataBase System,DBS)提供了一种将信息集合在一起的方法。数据库系统主要由数据库管理系统(Database Management System,DBMS)、数据库(Data Base,DB )、数据库应用程序(DataBase Application program , DBAP)三部分组成 。
1.数据库
数据库是长期存储在计算机内有结构的大量的共享的数据集合。它可以供各种用户共享、具有最小冗余度和较高的数据独立性。在数据库中,所有的数据被独立出来集中管理,按数据本身的内在联系组织、存放和管理。
2.数据库管理系统
在数据库系统中,如何科学地组织和存储数据,如何高效地获取和处理数据?完成这个任务的是专门的管理软件——数据库管理系统。 不同的数据库管理系统采用不同的数据模型,常用的数据模型有三种:层次模型、网状模型、关系模型。
3.数据库应用程序
数据库应用程序是指基于数据库的、主要针对某一具体应用编制的应用程序。数据库应用程序按照数据库方法对数据进行集中管理,获取、显示和更新数据库存储的数据,向应用系统提供数据支持。 在C#.NET中,数据库处理的基本方法是通过ADO.NET中提供的数据访问类来实现的。利用这些数据访问类,用户可以在程序中浏览、编辑各种数据库的数据。
10.1.2 结构化查询语句
SQL SQL(Structed Query Language,结构化查询语言)在 关系数据库领域中被称为标准数据库语言,它不仅具有 丰富的数据操纵功能,而且具有数据定义和数据控制功 能,是集数据操纵、数据定义、数据控制功能为一体的 关系数据语言。 用户通过SQL来访问数据库中的数据,使用SQL语句 对数据库进行数据查询,插入、删除记录,修改记录中 的数据。 几乎所有的数据库都支持SQL语言,编写数据库应用程序必须学习SQL语言。
为讨论方便,我们假设使用Microsoft Access创建了一个名为STU.dbf的数据库,其中有数据库表 student(StudentNum,StudentName,StudentSex) 并已输入若干记录。
1. Select语句
Select语句是最常用的语句,可以从数据库的表中获得满足一定条件的数据集。 常见的Select语句如下: select * from student //从表Student表中选择所有字段的所有记录 select StudentNum,StudentName from student //从表Student表中选择字段StudentNum和字段StudentName的所有记录 select * from score where StudentNum=1 //从表score表中查找学号StudentNum=1同学的所有课程的成绩。
2. Insert语句
用于向数据库表中插入一个新记录。例如,向表student中插入一个新纪录的语句如下:
Insert student (StudentNum,StudentName,StudentSex)Value(5,"田七","男")
3. Update语句
更新数据库的Student表中学号为1的学生名字为"陈七": Update Student Set StudentName=“陈七” Where StudentNum=1
4.Delete语句
用于删除数据库表中的一个记录。例如,删除student表中学号为1的学生,语句如下:
Delete From student where StudentNum=1
10.2 ADO.NET基础
通用数据访问:
Microsoft公司用于访问多个提供程序中数据的Microsoft策略称为通用数据访问。通用数据访问的目标是可从任意类型计算机上的任意应用程序中访问任意类型的数据。数据源可包括关系数据库、文本文件、电子数据表、电子邮件或地址簿,数据可被存储在台式机、局域网、大型机、内联网或Internet上。
10.2.1 ADO.NET简介
ADO.NET是英文ActiveX Data Objects for the .NET Framework的缩写,它是为.NET框架而创建的,是.NET Framework中用于数据访问的组件。 ADO.NET提供对Microsoft Access、 Microsoft SQL Server、Oracle等数据源以及通过OLE DB和XML公开的数据源的一致访问。应用程序可以使用ADO.NET来连接到这些数据源,并检索、操作和更新数据。
ADO.NET有如下一些优点:
(1)互用性:ADO.NET使用XML为数据传输的媒质。
(2)易维护性:使用N层架构分离业务逻辑与其他应用层次,易于增加其他层次。
(3)可编程性:ADO.NET对象模型使用强类型数据,使程序更加简练易懂。
(4)高性能:ADO.NET使用强类型数据取得高性能。
(5)可扩展性:ADO.NET鼓励程序员使用Web方式,由于数据是保存在本地缓存中的,不需要解决复杂的并发问题。
10.2.2 ADO.NET对象模型
ADO.NET的对象模型由两部分组成: 数据提供程序(Data Privider,有时也称托管提供程序) 和 数据集(DataSet)。
数据提供程序负责与物理数据源的连接,数据集代表实际的数据。 整个结构如下页所示。
1. 数据提供程序
数据提供程序组件属于数据源(Data Source)。 在.NET框架下的数据提供程序具有功能相同的对象,但这些对象的名称、部分属性或方法可能不同,如SQL Sever对象名称以SQL为前缀(如SqlConnection对象),而OLEDB对象名称以OleDb为前缀(如OleConnection对象),ODBC对象则以Odbc为前缀(如OdbcConnection对象)。
数据提供程序的核心对象
(1)Connection对象 表示与一个数据源的物理物理连接,它的属性决定了数据提供程序(使用OLEDB数据提供程序时)、数据源、所连接到的数据库和连接期间用到的字符串。 Connection对象的方法比较简单:打开和关闭连接,改变数据库和管理事务。
(2)Command对象代表在数据源上执行一条SQL语句或一个存储过程。 代表在数据源上执行一条SQL语句或一个存储过程。 对于一个Connection对象来说,可以独立地创建和执行不同的Command对象,也可以使用DataAdapter对象(包含4个Command对象成员)操作数据源中的数据。
(3)DataReader对象 是一种快速、低开销的对象,用于从数据源中获取仅转发的、只读的数据流,往往用来显示结果。 DataReader不能用代码直接创建,只能通过调用Command对象的ExecuteReader方法来实现。
(4)DataAdapter(数据适配器)对象 是功能最复杂的对象,它是Connection对象和数据集之间的桥梁。 DataAdapter对象包含4个Command对象: SelectCommand对象,InsertCommand对象, UpdateCommand对象,DeleteCommand对象, 完成对数据库中的数据的选择、插入、更新、删除等功能。 DataAdapter对象隐藏了Connection对象和Command对象沟通的细节,方便使用。在许多数据库应用中,都使用DataAdapter对象。使用DataAdapter对象例子如下:
String txtConn="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\\\VC#\\\\studentI.mdb"; OleDbConnection conn=new OleDbConnection(txtConn); //建立连接
string txtCommand="SELECT * FROM student"; OleDbDataAdapter da=new OleDbDataAdapter(txtCommand,conn);
3. 数据集
数据集(DataSet)是记录在内存中的数据。数据集像是一个简化的关系数据库,包含了表、表与表的关系。 要注意的是,在ADO.NET中,数据集和数据源并没有连接在一起,数据集不知道自身所包含的数据来自何处,这些数据可能来自于多个数据源。 数据集的的主要特征是可用不同的方式访问和操作本地数据集中的数据。 数据集由两个基本对象组成:
DataTableCollection 和 DataRelationCollection
(1)DataTableCollection DataTableCollection对象包含零个或多个DataTable对象,而DataTable对象又由Columns集合 、Rows 集合、Constraints集合组成。
①DataTable的Columns集合定义了组成数据表的列,除了ColumnName属性和DataType属性外,还可定义该列能否为空值(AllowDBNull),或定义最大长度(MaxLength),或将它定义为可计算值的表达式(Expression)。
②DataTable的Rows 集合包含的是Columns集合定义的实际数据,但其中可能为空。对于每一行而言,数据表都会保留其原始值(Original Value)、当前值(Current Value)和建议值(Proposed Value),这些功能大大简化了编程任务。 ③DataTable的Constraints集合包含零个或多个约束。在关系数据库中,约束用来维护数据库的完整性。
(2)DataRelationCollection 数据集的DataRelationCollection对象包含零个或多个数据关系(DataRelation)。 数据关系提供了简单的可编程界面,以实现从一个表中的主行导航到另一表中相关的行
10.2.3 ADO.NET数据访问步骤
1.通过ADO访问数据库,一般要经过以下四个步骤:
(1)创建一个到数据库的连接,即ADO.Connection;
(2)查询一个数据集合,即执行SQL,产生一个Recordset;
(3)对数据集合进行需要的操作;
(4)关闭数据连接。
- ADO.NET 技术访问数据库
ADO.NET的最重要概念之一是DataSet。DataSet是不依赖于数据库的独立数据集合。所谓独立,指的是即使断开数据连接,或者关闭数据库,DataSet依然是可用的。 有了DataSet,那么,ADO.NET访问数据库的步骤就相应地改变了。在ADO.NET里,上述步骤有很大的变化。
ADO.NET访问数据库的步骤:
(1)创建一个数据库连接。
(2)请求一个记录集合。
(3)把记录集合暂存到DataSet。
(4)如果需要,返回(2)。(DataSet可以容纳多个数据集合)
(5)关闭数据库链路。
(6)在DataSet上作所需要的操作。
10.2.4 ADO.NET命名空间
通过ADO.NET访问数据需要引入几个命名空间。ADO.NET命名空间如下表所示。
10.3 使用ADO.NET访问数据库
10.3.1 连接Microsoft Access 数据库
访问Access 数据库的第一步是连接数据库,这时需 要使用OLE DB数据提供程序。 OLE DB(Object Linking and Embedding, Database, 又 称为OLE DB或OLE-DB),一个基于COM (Component Object Model 组件对象模型 )的数据存储对象,能提供对所有类型的数据的操作,甚至能在离线的 情况下存取数据。 OLE DB.NET数据提供程序在System.Data.OleDb命名空间中定义,也包含在System.Data.dll文件中。 目前在网络上很流行的小型数据库Access,就应该使 用OLE DB.NET数据提供程序来访问。
OleDbConnection定义了两个构造函数,一个没有参数,一个接受字符串。使用OLE DB.NET数据提供程序时需要指定底层数据库特有的OLE DB Provider。 例如,连接到Access数据库库的连接字符串格式为:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=mydb.mdb;user Id=;password=;
其中,Provider和Data Source是必须项。
下面是连接到Access数据库的例子:
String ConnectionString; ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=studb.mdb"; OleDbConnection conn=new OleDbConnection(ConnectionString); conn.Open(); … //添加访问、操作数据库的事件; … conn.Close();
10.3.2 连接Microsoft Access 数据库实例
【例10-1】编写一个应用程序来连接名为book的Access数据库,并根据连接结果输出一些信息。
10.3.3 读取和操作数据
Command对象与DataReader对象是操作数据库数据的最直接方法。 Command对象根据程序员所设置的SQL语句对数据库进行操作。 对需要返回结果集的SQL语句,Command对象的ExecuteReader方法生成DataReader对象,后者提供一个只读、单向的游标,从而使程序员能够以行为单位获取结果集中的数据。
作为数据提供程序的一部分,Command对象和DataReader对象对应着特定的数据源,如System.Data.OleDb命名空间中的OleDbCommand和OleDbDataReader,以及System.Data.SqlClient命名空间中的SqlCommand和SqlDataReader 。
1.建立Command对象 首先创建一个Command对象。如果要通过代码运行时创建Command对象,可以使用4个版本的构造函数
例如,构造函数使用的几个例子 :
(1)构造函数不带任何参数 OleDBCommand cmd=new OleDBCommand (); cmd.Connection=ConnectionObject; cmd.CommandText=CommandText; 这里的CommandText可以是从数据库检索数据的SQL Select语句: String CommandText=”select * from S”; OleDBCommand cmd=new OleDBCommand (CommandText,ConnectionObject);
(2)构造函数可以接受一个命令文本 OleDBCommand cmd=new SqlCommand(CommandText); cmd.Connection=ConnectionObject; 上面代码实例化Command对象,传递CommandText,并对Command对象的CommandText属性初始化,然后对Connection属性赋值。
(3)构造函数接受一个Connection对象和一个命名文本 OleDBCommand cmd=new OleDBCommand (CommandText,ConnectionObject); 其中,第一个参数为string型的命令文本,第二个为Connection对象。
2.Command对象的属性
可以看出,不同构造函数的区别在于对Command对象不同属性的默认设置,这些属性也是Command对象较为重要的几个属性。
(1)CommandText属性, 是字符串属性。包含要执行的SQL语句或数据源中存储过程的名字。
(2)Connection属性,指定要执行数据命令的连接对象,即指定要执行数据操作的数据源。
(3)Transaction属性,指定执行数据命令登记的事务对象。 此外,Command对象还有其它一些属性。
其中CommandText属性存储的字符数据依赖于CommandType属性的类型,例如:
(1)当CommandType属性设置为StoreProcedure时,表示CommandText属性的值为存储过程的名称;
(2)而当CommandType属性设置为TableDirect时,CommandText属性应设置为要访问的一个或者多个表的名称;
(3)如果CommandType设置为Text,CommandText则为SQL语句。
(4)CommandType默认为Text。如表10-4所示,列举了CommandType的所有值。
3.执行数据命令 调用Command对象的相关方法,就可以实现对数据源的操作。 常用的方法有ExecuteNonQuery方法和ExecuteScalar方法。选择何种方法取决于要从命令中返回什么数据。
(1)ExecuteNonQuery方法 ExecuteNonQuery方法主要用来更新数据。通常使用它来执行Update、Insert和Delete语句。 Command对象通过ExecuteNonQuery方法更新数据库的过程非常简单,需要进行的步骤如下:
①创建数据库连接。
②创建Command对象,并指定一个Insert、Update、Delete查询或存储过程SQL语句。
③把Command对象依附到数据库连接上。
④调用ExecuteNonQuery方法。
⑤关闭连接。
可以使用ExcecuteNonQuery方法向数据表中插入、删除、更新记录。
例如:在表S里插入一条记录,SNO=‘S12’,SNAME=‘李四’,代码如下:
string createdb = "use studb INSERT INTO S(SNO,SNAME) VALUES('S12','李四');"; string connstr; connstr ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=studb.mdb"; OleDbConnection conn=new OleDbConnection(connstr); OleDBCommand cmd=newOleDBCommand (createdb,conn); conn.Open(); int RecordsAffected = cmd.ExecuteNonQuery(); conn.Close();
(2)ExecuteScalar方法 ExecuteScalar方法执行返回单个值的命令。
【例10-2】用ExecuteScalar方法获取book数据库bokname表中图书的总数目。
10.4 数据源控件和数据绑定控件
10.4.1数据源控件
前面已经介绍了如何使用ADO.NET中的相关对象如 connecting、command等对象对数据库中的数据进行访问。从 中可以看到,要想访问数据,必须编写相关代码进行连接,因 此用起来较麻烦。VS引入了一系列可以改善数据访问的新工 具,包括数据源控件和数据绑定控件。新增的这些控件可以消 除以前版本中要求的大量重复性代码。例如,可以很容易的将 SQL语句与数据源控件相关联,并且帮它们绑定到数据绑定控 件。本节就以BindingSource数据源控件为例作介绍。
1.BindingSource控件简介
BindingSource是一个专门访问数据库的控件,该控件可以很快地连接Access、SQLServer等数据库,而且不用写任何代码。此外,该控件还可以使用SQL语句对数据库记录实行操作。 BindingSource控件不用设置连接属性,所要做的只是使用DataSource属性设置Access数据库文件的位置,该控件将负责维护数据库的基础连接。应该将Access数据库放在项目的bin目录中,并且使用相对路径引用它们。
2.访问Access数据库文件
下面将应用一个实例说明AccessDataSource访问Access数据库。 在连接Access数据库文件前,应首先建立一个数据库文件。设数据库文件名为book.mdb,有数据库表bookname(bkid,bkname,bkauthor、bkcompany),并添加相关数据。 数据库保存在当前项目的bin文件夹的Debug文件夹中 。
【例10-3】建立一个项目,在窗体上创建数据源控件BindingSource1,将其连接到book.mdb。
操作步骤如下:
1.新建一个项目例10-3,在form1上创建一个控件BindingSource1,并选择DataSource属性,如图10-10所示。
2.单击DataSource属性行右边的下拉按钮,从显示框中选择“添加项目数据源”后,弹出如图10-11所示的窗口,这是一个用于配置数据库数据源的向导。
3.在“应用程序从哪里获取数据?”栏中选择“数据库”项,单击“下一步”按钮,在随后显示的对话框中单击“新建连接”按钮,弹出“选择数据源”对话框。
4.选择“Microsoft Access 数据库文件”,“数据提供程序”框中显示“用于OLE DB的.NET Framework数据提供程序”,如图10-12所示。图中可选项有多个,这里选择第一个选项“Microsoft Access 数据库文件”,指定来自Access数据库。
5.单击“继续”按钮,在“添加连接”对话框单击“浏览”按钮,在随后的“选择Microsoft Access数据库文件”对话框中选择文件“book.mdb”,单击“打开”按钮,返回“添加连接”对话框。
6.在“添加连接”对话框单击“测试连接”按钮,如果连接成功,则消息框显示“测试连接成功”,单击“确定”按钮,返回“添加连接”对话框。。
7.单击“下一步”按钮,返回数据源配置向导,如图10-13所示。
8.选中表“book.mdb”,最后单击“完成”按钮,完成数据源配置。
至此,配置BindingSource控件数据源基本完成。 如何显示数据库源内容呢? 下面将介绍如何结合其他控件使配置的数据库源内容显示在页面上。
10.4.2 数据绑定控件
之前我们介绍了如何使用ADO.NET的相关对象在页面上显示相关数据表中的相关记录,但如果想要更进一 步或者按照一定表格的方式来显示数据,仅仅使用这些对象来实现是十分麻烦的。VS提供了很多数据绑定控件通过这些数据绑定控件就可以很轻松的实现各种显示式。常用的数据绑定控件有DataGridView控件等。这里以最常用的DataGridView控件为例来介绍如何使用数据绑定控件。 DataGridView控件的功能十分强大,它以表格的方式来显示数据源中的数据,其中每列表示数据中的一个字段,每行表示数据中的一条记录。可以使用DataGridView控件来显示少量数据的只读视图,也可以对其进行缩放以显示特大数据集的可编辑视图。通过选择一些属性,可以轻松的自定义DataGridView控件的外观。可以将许多类型的数据存储区用作数据源,也可以在没有绑定数据源的情况下操作DataGridView控件。DataGridView控件可绑定到数据源控件。
【例10-4】在项目“例10-3”的窗体上设置数据绑定控件DataGridView1,将其与数据源BindingSource1连接。
1.首先在form1窗体上创建一个数据绑定控件DataGridView1,并选择DataGridView控件的相关属性,设计该控件的界面,如图10-14所示。
2.然后单击DataGridView控件右上角的按钮,选择“选择数据源-BindingSource1”下的bookname BindingSource,自此DataGridView控件已基本配置成功。
3.单击F5,启动程序调试,窗口显示如图10-15所示。从中可以看到,在BindingSource1控件中配置的SQL语句的内容在页面上显示出来了。 如果事先没有配置过数据源,在DataGridView控件中也可立即配置数据源,方法如上小节所讲,效果等同。
以上是关于C#(Sharp)操作数据库原理及案例精析(强烈建议收藏)的主要内容,如果未能解决你的问题,请参考以下文章