一、ADO.NET数据库操作
任何一个应用程序都离不开数据的存储,数据可以在内存中存储,但只能在程序运行时存取,无法持久保存。
数据还可以在磁盘中以文件的形式存储,但文件的管理和查找又十分烦琐无法胜任大数量的存储。
将数据存储到数据库中是在应用程序中持久存储数据的常用方式。
在 C# 语言中提供了 ADO.NET 组件来实现连接数据库以及操作数据库中数据的功能。
在 C# 语言中 ADO.NET 是在 ADO 的基础上发展起来的,ADO (Active Data Object) 是一个 COM 组件类库,用于访问数据库,而 ADO.NET 是在 .NET 平台上访问数据库的组件。
ADO.NET 是以 ODBC (Open Database Connectivity) 技术的方式来访问数据库的一种技术。
ADO.NET 中的常用命名空间如下表所示。
命名空间 | 数据提供程序 |
---|---|
System.Data.SqlClient | Microsoft SQL Server |
System.Data.Odbc | ODBC |
System.Data.OracleClient | Oracle |
System.Data.OleDb | OLE DB |
在使用 ADO.NET 进行数据库操作时通常会用到 5 个类,分别是 Connection 类、 Command 类、DataReader 类、DataAdapter 类、DataSet 类。
在接下来的讲解中我们将以连接 SQL Server 为例介绍 ADO.NET 中的对象,引用的命名空间为 System.Data.SqlClient。
除了 DataSet 类以外,其他对象的前面都加上 Sql,即 SqlConnection、SqlCommand、SqlDataReader、SqlDataAdapter。
1) Connection 类
该类主要用于数据库中建立连接和断开连接的操作,并且能通过该类获取当前数据库连接的状态。
使用 Connection 类根据数据库的连接串能连接任意数据库,例如 SQLServer、Oracle、MySQL 等。
但是在 .NET 平台下,由于提供了一个 SQL Server 数据库,并额外提供了一些操作菜单便于操作,所以推荐使用 SQLServer 数据库。
2) Command 类
该类主要对数据库执行增加、删除、修改以及查询的操作。
通过在 Command 类的对象中传入不同的 SQL 语句,并调用相应的方法来执行 SQL 语句。
3) DataReader 类
该类用于读取从数据库中查询出来的数据,但在读取数据时仅能向前读不能向后读, 并且不能修改该类对象中的值。
在与数据库的连接中断时,该类对象中的值也随之被清除。
4) DataAdapter 类
该类与 DataSet 联用,它主要用于将数据库的结果运送到 DataSet 中保存。
DataAdapter 可以看作是数据库与 DataSet 的一个桥梁,不仅可以将数据库中的操作结果运送到 DataSet 中,也能将更改后的 DataSet 保存到数据库中。
5) DataSet 类
该类与 DataReader 类似,都用于存放对数据库查询的结果。
不同的是,DataSet 类中的值不仅可以重复多次读取,还可以通过更改 DataSet 中的值更改数据库中的值。
此外,DataSet 类中的值在数据库断开连接的情况下依然可以保留原来的值。
(总之,又是好几个类,并用于一个大型的数据集合,也就是所谓的数据库了。)
二、Connection:连接数据库
C# 语言中 Connection 类是 ADO.NET 组件连接数据库时第一个要使用的类,也是通过编程访问数据库的第一步。
接下来我们来了解一下 Connection 类中的常用属性和方法,以及如何连接 SQL Server 数据库。
Connection 类概述
Connection 类根据要访问的数据和访问方式不同,使用的命名空间也不同,类名也稍有区别,在这里我们使用的是 SqlConnection 类,以及微软提供的 SQL Server 2014 数据库。
SqlConnection 类中提供的常用属性和方法如下表所示。
属性或方法 | 说明 |
---|---|
SqlConnection() | 无参构造方法 |
SqlConnection(string connectionstring) | 带参数的构造方法,数据库连接字符串作为参数 |
Connectionstring | 属性,获取或设置数据库的连接串 |
State | 属性,获取当前数据库的状态,由枚举类型 Connectionstate 为其提供值 |
ConnectionTimeout | 属性,获取在尝试连接时终止尝试并生成错误之前所等待的时间 |
DataSource | 属性,获取要连接的 SQL Server 的实例名 |
Open() | 方法,打开一个数据库连接 |
Close() | 方法,关闭数据库连接 |
BeginTransaction() | 方法,开始一个数据库事务 |
使用 Connection 类连接数据库
在使用 Connection 类连接 SQL Server 2014 时,先要编写数据库连接串。
数据库连接串的书写方法有很多,这里介绍两种常用的方法。
第1种方式
server = 服务器名称 / 数据库的实例名 ; uid = 登录名 ; pwd = 密码 ; database = 数据库名称
其中:
server:用于指定要访问数据库的数据库实例名,服务器名称可以换成 IP 地址或者数据库所在的计算机名称,如果访问的是本机数据库,则可以使用“.”来代替,如果使用的是默认的数据库实例名,则可以省略数据库实例名。例如连接的是本机的默认数据库,则可以写成“server = .”。
uid:登录到指定 SQL Server 数据库实例的用户名,相当于以 SQL Server 身份验证方式登录数据库时使用的用户名,例如 sa 用户。
pwd:与 uid 用户对应的密码。
database:要访问数据库实例下的数据库名。
第2种方式
Data Source = 服务器名称 \ 数据库实例名 ; Initial Catalog = 数据库名称 ; User ID = 用户名 ; Password = 密码
其中:
Data Source:与第1种连接串写法中的 server 属性的写法一样,用于指定数据库所在的服务器名称和数据库实例名,如果连接的是本机的默认数据库实例,则写成“Data Source=. ”的形式。
Initial Catalog:与第 1 种连接串写法中的 database 属性的写法一样,用于指定在 Data Source 中数据库实例下的数据库名。
User ID:与第 1 种连接串写法中的 uid 属性的写法一样,用于指定登录数据库的用户名。
Password:与第 1 种连接串写法中的 pwd 属性的写法一样,用于指定 User ID 用户名所对应的密码。
此外,还可以在连接字符串中使用 Integrate Security = True 的属性,省略用户名和密码,即以 Windows 身份验证方式登录 SQL Server 数据库。 将数据库连接更改如下:
Data Source = 服务器名称 \ 数据库实例名 ; Initial Catalog = 数据库名称 ; Integrate Security = True
需要注意的是,由于在使用 Windows 身份验证的方式登录数据库时,会对数据库的安全性造成一定的影响,因此不建议使用 Windows 身份验证的方法,而是使用 SQL Server 验证方式登录数据库,即指定用户名和密码。
三、使用 SqlConnection 类与数据库连接
在完成了数据库连接串的编写后即可使用 SqlConnection 类与数据库连接,分以下 3 步完成。
1) 创建 SqlConnection 类的实例
对于 SqlConnection 类来说,上表中提供了两个构造方法,通常是使用带一个字符串参数的构造方法来设置数据库的连接串创建其实例,语句形式如下。
SqlConnection 连接对象名 = new SqlConnection( 数据库连接串 );
2) 打开数据库连接
在创建 SqlConnection 连接类的实例后并没有连接上数据库,需要使用连接类的 Open 方法打开数据库的连接。
在使用 Open 方法打开数据库连接时,如果数据库的连接串不正确或者数据库的服务处于关闭状态,会出现打开数据库失败的相关异常,因此需要通过异常处理来处理异常。
打开数据库连接的语句形式如下。
连接对象名.Open();
3) 关闭数据库连接
在对数据库的操作结束后要将数据库的连接断开,以节省数据库连接的资源。
关闭数据库连接的语句形式如下。
连接对象名.Close();
如果在打开数据库连接时使用了异常处理,则将关闭数据库连接的语句放到异常处理的 finally 语句中,这样能保证无论是否发生了异常都将数据库连接断开,以释放资源。
除了使用异常处理的方式释放资源外,还可以使用 using 的方式释放资源。
具体的语句如下。
using(SqlConnection 连接对象名 = new SQLConnection( 数据库连接串 )){ //打开数据库连接 //对数据库先关操作的语句}
using 关键字的用法主要有两个,一个是引用命名空间,一个是创建非托管资源对象。
在 .NET 平台上资源分为托管资源和非托管资源,托管资源是由 .NET 框架直接提供对其资源在内存中的管理,例如声明的变量;非托管资源则不能直接由 .NET 框架对其管理,需要使用代码来释放资源,例如数据库资源、操作系统资源等。
1.例
创建与本机 SQL Server 数据库的连接,并使用异常处理。
根据题目要求,连接 SQL Server 数据库时使用的用户名为 sa、密码为 pwdpwd,连接的数据库为test。
创建 Windows 窗体应用程序,并在窗体上放置一个按钮,在按钮的单击事件中加入以下代码。
//编写数据库连接串string connStr = "Data source=.;Initial Catalog=test;User ID=sa;Password=pwdpwd";//创建SqlConnection的实例SqlConnection conn = null;try{ conn = new SqlConnection(connStr); //打开数据库连接 conn.Open(); MessageBox.Show("数据库连接成功!");}catch(Exception ex){ MessageBox.Show("数据库连接失败!" + ex.Message);}finally{ if (conn != null) { //关闭数据库连接 conn.Close(); }}
分析:
首先是编写数据库连接串,
就是上面的,使用 Connection 类连接数据库。第2种方法。
然后创建 SqlConnection 类的实例。
之所以先为空,是为了放进try中进行局部变量转化。
如果打开数据库成功,就提示消息框提示。
如果报错,就提示数据库连接失败!消息框。
最后如果数据库不等于空,所以关闭数据库连接.
运行结果:
2.例
在上一实例的基础上使用 using 关键字释放资源。
根据题目要求,省略了 finally 部分的语句,代码如下。
//编写数据库连接串string connStr = "Data source=.;Initial Catalog=test;User ID=sa;Password=pwdpwd";//创建SqlConnection的实例try{ using(SqlConnection conn=new SqlConnection(connStr)) { //打开数据库连接 conn.Open(); MessageBox.Show("数据库连接成功!"); }}catch(Exception ex){ MessageBox.Show("数据库连接失败!" + ex.Message);}
分析:
第6行,使用using关键字。
而 using 关键字的用法主要有两个,一个是引用命名空间,一个是创建非托管资源对象。
在 .NET 平台上资源分为托管资源和非托管资源,托管资源是由 .NET 框架直接提供对其资源在内存中的管理,例如声明的变量;非托管资源则不能直接由 .NET 框架对其管理,需要使用代码来释放资源,例如数据库资源、操作系统资源等。
运行结果:
事实上,我并没有连接到数据库,所以导致了这个情况。
之所以会这样,是因为我在安装数据库时,并没有SQL server身份验证,而是Windows身份验证,所以连接发生就属于第2种下面的另一种。
以 Windows 身份验证方式登录 SQL Server 数据库
将数据库连接更改如下:
Data Source = 服务器名称 \ 数据库实例名 ; Initial Catalog = 数据库名称 ; Integrate Security = True
四、SQL Server 数据库安装。(因为配置环境很重要)
1.首先百度搜索安装。
我下载的是这个
2.找到这个
打开后是这个
选择安装,并安装右边的第一个“全新SQL Server 独立安装或向现有安装添加功能”。
然后再点击“安装SQLServer管理工具”,跳转页面后,下载SSMS。
总之就是这两个安装包,并按照提示进行下一步安装。
首先是SQL2019,安装完后点击自定义。
然后弹出这个:
然后进行下一步逐一安装,唯一注意的是,“数据库引擎配置”。
因为上述表示,用Windows身份验证模式不好,所以就用混合模式
不过我这里因为出现密码设置过于简单的提示,所以就暂时使用Windows身份验证模式了。
然后就是下一步下一步。
然后再安装:SSMS-Setup-CHS.exe,也就是数据库管理工具。
安装完后,在电脑菜单栏中找到这个,并打开。
然后在菜单栏的文件-连接对象资源管理器。
弹出这个
服务器的名称也就确定了。
而我这时先使用Windows身份验证进行登录。
然后是这样的:
右键这个,点属性:
在安全性中,切换“SQL Server和Windeos身份验证模式”。
然后打开数据库-》安全性-》登录名-》sa账号,并双击。
可修改密码
并且点到状态,激活启动。
都设置完后,再点击重启一些数据库。
然后就能使用sa账户访问了。
之后就是新建数据库:
添加数据库的名称
然后在表中进行创建数据表。
列名:数据类型
然后Ctrl+s保存,并刷新一下,找到保存的表,再填写内容。
右键-》编辑前200行,就可以添加了。
添加内容元素,就可以在VS进行操作了。
(大致就这些,虽然有些乱,不过熟悉了也就发现没什么不同的。)
首先就是下载软件,SQL server数据库,和管理工具。
(如果习惯代码的话,也可以使用指令进行数据库的创建,表的创建和录入。这里暂时先不管了,以后再说。)
然后就是配置身份验证,初期不让用sa,那就先Windows身份进入。
再通过“安全性”-》“登录名”里启动sa,并且修改密码什么的,再重启一下数据库。
最后就是创建数据库,表的创建和数据录入了。
也就是“数据库”右键创建;
找到创建的数据库名-》进入“表”,再右键创建保存。
然后刷新,否则看不到。
最后再找到表名,右键“编辑前200行”进行手动录入。
而表名-》右键“设计”,可以重新构建表的类型。
基本上就是这些吧!然后就是注意数据类型,以及其他是否为空的条件,从而保证表的完整性,严谨性。