时间:2020-6-20来源:本站原创作者:佚名
0.前言

在上一篇中初略的介绍了一下SQL的基本写法,这一篇开始我们正式步入C#操作数据库的范围。通过这一系列的内容,我想大家能对于数据库交互有了一定的认识和基础。闲话不多说,先给大家介绍一个C#操作数据库的方式。

1.ADO.NET的介绍

在ADO.NET出现之前,C#连接数据库有很多种方式,各种框架琳琅满目。用户们饱受困扰,再加上乱七八糟的连接方式对语言的发展也是一种强有力的阻挠。所以微软决定搞一套标准化出来,之后ADO.NET诞生了。

ADO.NET定义了一系列操作数据库的接口和基类,而数据库厂商只需要根据自己的实际情况开发对应的实现类就可以了。

2.使用ADO.NET操作需要的步骤

使用ADO.NET操作数据库,先需要一个连接也就是IDbConnection实例,然后使用IDbCommand执行,通过IDataReader读取数据。

先来简单介绍一下上面提到的接口:

a.IDbConnection

表示一个与数据源的开放连接,并由访问关系数据库的.NET数据提供程序实现,也就是说这只是一个接口,具体的实现得看具体的数据库。

我们先看一下,具体的属性和方法吧:

publicstringConnectionString{get;set;}//获取或设置用于打开数据库的连接字符串publicstringDatabase{get;}//获取当前连接或即将连接的数据库名称publicSystem.Data.ConnectionStateState{get;}//获取当前连接的状态publicSystem.Data.IDbTransactionBeginTransaction();//开启一项数据库事务publicvoidChangeDatabase(stringdatabaseName);//修改已打开连接的当前数据库publicvoidClose();//关闭当前连接publicSystem.Data.IDbCommandCreateCommand();//创建并获取与该连接关联的命令对象publicvoidOpen();//开启与数据库的连接

b.IDbCommand

表示连接到数据源时执行的SQL命令,并由访问关系数据库的.NET数据提供程序实现。与IDbConnection一致,也是一个接口。

这个接口的属性和方法如下:

publicstringCommandText{get;set;}//获取或设置要对数据源运行的文本命令,也就是SQL语句publicintCommandTimeout{get;set;}//获取或设置在终止尝试执行命令并生成错误之前的等待时间publicSystem.Data.CommandTypeCommandType{get;set;}//指定或者获取解释CommandText属性的方式publicSystem.Data.IDbConnectionConnection{get;set;}//获取或设置执行该命令的连接publicSystem.Data.IDataParameterCollectionParameters{get;}//获取命令的参数化列表publicSystem.Data.IDbTransactionTransaction{get;set;}//获取或设置该命令关联的事务publicvoidCancel();//尝试取消执行命令publicSystem.Data.IDbDataParameterCreateParameter();//创建一个参数publicintExecuteNonQuery();//执行一个语句,并返回受影响的行数publicSystem.Data.IDataReaderExecuteReader();//在Connect上执行CommandText,并返回一个IDataReaderpublicobjectExecuteScalar();//执行查询,并返回第一行第一列,其他数据忽略

c.IDataReader

提供一种读取结果集(通过对数据源执行命令获取)的一个或多个只进流的方法,具体实现由访问关系数据库的.NET数据提供程序实现。

这里的只进流的意思类似于只读流,也就是说它是一种单向的流,从数据库传向程序的流。

这个接口的属性和方法如下:

publicintDepth{get;}//获取一个值,该值指示当前行的嵌套深度publicboolIsClosed{get;}//获取该读取器的是否关闭publicintRecordsAffected{get;}//获取由执行SQL语句而更改、插入或删除的行数publicvoidClose();//关闭IDataReader对象publicSystem.Data.DataTableGetSchemaTable();//获取一个描述该读取器关联的列元数据publicboolNextResult();//显示是否有下一行,如果有则在下次读取的时候,读取下一行的数据publicboolRead();//与NextResult类似

同时,IDataReader继承了接口IDataRecord,也就是说IDataReader也能直接返回当前行的数据。

来,我们看看它从IDataRecord继承了哪些吧(也就是IDataRecord有的属性和方法)。

publicintFieldCount{get;}//获取当前行中的列数publicobjectthis[inti]{get;}//获取位于指定索引处的列publicobjectthis[stringname]{get;}//获取具有指定名称的列publicSystem.Data.IDataReaderGetData(inti);//获取指定列序号的DataReaderpublicTypeGetFieldType(inti);//获取对应于会从Type返回的Object类型的GetValue(Int32)信息publicstringGetDataTypeName(inti);//获取指定字段的数据类型信息publicstringGetName(inti);//获取要查找的字段的名称publicintGetOrdinal(stringname);//返回命名字段的索引publicboolGetBoolean(inti);//作为布尔值获取指定列的值publicbyteGetByte(inti);//获取指定列的8位无符号整数值publiccharGetChar(inti);//获取指定列的字符值publicDateTimeGetDateTime(inti);//获取指定字段的日期和时间数据值publicdecimalGetDecimal(inti);//获取指定字段的数值publicdoubleGetDouble(inti);//获取指定字段的双精度浮点数publicfloatGetFloat(inti);//获取指定字段的单精度浮点数publicGuidGetGuid(inti);//获取指定字段的GUID值publicshortGetInt16(inti);//获取指定字段的16位带符号整数值publiclongGetInt64(inti);//获取指定字段的64位带符号整数值publicstringGetString(inti);//获取指定字段的字符串值publicobjectGetValue(inti);//返回指定字段的值publicintGetValues(object[]values);//将当前记录的值按顺序填充到数组中,并返回实际的数目publicboolIsDBNull(inti);//返回指定字段是否设置为null

特别补充说明

ConnectionState是一个枚举状态,表示数据连接状态,其属性值如下:

字段值说明Broken16与数据源的连接中断。只有在连接打开之后才可能发生这种情况。可以关闭处于这种状态的连接,然后重新打开。(该值是为此产品的未来版本保留的。)Closed0连接已关闭。Executing4连接对象正在执行命令。(该值是为此产品的未来版本保留的。)Fetching8连接对象正在检索数据。(该值是为此产品的未来版本保留的。)Open1连接处于打开状态。

CommandType用来指定如何解释命令字符串,属性值如下:

字段值说明StoredProcedure4存储过程的名称。TableDirect表的名称。Text1SQL文本命令。(默认。)3.如何使用ADO.NET操作数据库

以SQLServer为例,创建一个Connection:

usingSystem.Data;usingSystem.Data.SqlClient;//SqlServer的命名空间

stringconnectStr="";IDbConnectionconnection=newSqlConnection(connectStr);

在.NETFramework中,以上代码是正确的,因为.NETFramework内置了SQLServer的数据访问程序,也就是数据驱动。但是在.NETCore中,需要为项目添加如下包的引用:

System.Data.SqlClient

这里简单介绍一下如何使用VisualStudio安装包:

如图所示,在-下找到管理解决方案的NuGet程序包,点击。然后会出现类似于下图:

然后点击浏览,输入:System.Data.SqlClient

选中第一项,然后在右侧勾选要添加包的项目,然后点击安装。

OK,现在假设你们都已经安装好了。然后继续下一步操作:

执行一个查询语句:

selectnamefromdemo;

创建一个Command:

这时候创建Command有这样几种方式:

IDbCommand
转载请注明原文网址:http://www.helimiaopu.com/jsyy/7714.html

------分隔线----------------------------