欢迎您访问高等教育自学考试信息服务网平台!

C#数据操作系列2.ADO.NET操作

更新时间:2024-09-15 19:44:36作者:匿名

1. ADO.NET的介绍

在ADO.NET出现之前,C#连接数据库的方式有很多种,各种框架琳琅满目。用户正在遭受痛苦,而混乱的连接是语言发展的强大障碍。因此微软决定对其进行标准化,然后ADO.NET诞生了。

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

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

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

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

a.IDbConnection

表示与数据源的开放连接,由访问关系数据库的.NET 数据提供程序实现。这意味着它只是一个接口,具体实现取决于具体的数据库。

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

公共字符串ConnectionString { 获取;放; }//获取或设置用于打开数据库的连接字符串public string Database { get; }//获取当前连接或待连接的数据库名称public System.Data.ConnectionState State { get; }//获取当前连接的状态public System.Data.IDbTransaction BeginTransaction();//打开一个数据库事务public void ChangeDatabase(string databaseName);//修改打开连接的当前数据库public void Close(); //关闭当前连接public System.Data.IDbCommand CreateCommand ();//创建并获取与该连接关联的命令对象public void Open();//打开与数据库的连接b. IDb命令

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

该接口的属性和方法如下:

公共字符串CommandText { 获取;放; } //获取或设置对数据源运行的文本命令,即SQL语句public int CommandTimeout { get;放; } //获取或设置在终止尝试执行命令并生成错误之前的等待时间public System.Data.CommandType CommandType { get;放; }//指定或获取解释CommandText属性的方式public System.Data.IDbConnection Connection { get;放; }//获取或设置执行命令的连接public System.Data.IDataParameterCollectionParameters { get; }//获取命令的参数化列表public System.Data.IDbTransaction Transaction { get;放; }//获取或设置与命令关联的事务public void Cancel();//尝试取消命令的执行public System.Data.IDbDataParameter CreateParameter();//创建参数public int ExecuteNonQuery();//执行语句并返回受影响的行数public System.Data.IDataReader ExecuteReader ();//在Connect 上执行CommandText 并返回一个IDataReader 公共对象ExecuteScalar ();//执行查询并返回第一行和第一列,其他数据被忽略c数据读取器

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

这里的in-only流的含义和只读流类似,也就是说,它是一种单向流,从数据库到程序。

该接口的属性和方法如下:

C#数据操作系列2.ADO.NET操作

公共int 深度{ 得到; }//获取一个值,表示当前行的嵌套深度public bool IsClosed { get; }//获取读取器是否关闭public int RecordsAffected { get; }//获取通过执行SQL语句更改、插入或删除的行数public void Close();//关闭IDataReader对象public System.Data.DataTable GetSchemaTable();//获取描述读取器的列元数据Association public bool NextResult();//显示是否有下一行,如果有,则下次读取时读取下一行的数据public bool Read();//与NextResult类似,IDataReader继承接口IDataRecord ,也就是说IDataReader 也可以直接返回当前行的数据。

来,我们看一下它继承了IDataRecord 哪些内容(即IDataRecord 的属性和方法)。

公共int FieldCount { 获取; }//获取当前行的列数public object this[int i] { get; }//获取指定索引处的列public object this[string name] { get; }//获取指定名称的Column public System.Data.IDataReader GetData(int i);//获取指定列号的DataReader public Type GetFieldType(int i);//获取对应的GetValue(Int32)信息Type 将返回的Object 类型public string GetDataTypeName (int i);//获取指定字段的数据类型信息public string GetName (int i);//获取要查找的字段名称public int GetOrdinal (string name);//返回命名字段的索引public bool GetBoolean (int i);//获取指定列的值作为布尔值public byte GetByte (int i);//获取8位public char GetChar(int i);//获取指定列的无符号整数值public DateTime GetDateTime(int i);//获取指定字段的日期时间数据值public Decimal GetDecimal(int i); //获取指定字段的值public double GetDouble (int i);//获取指定字段public float GetFloat(int i);//获取指定字段的单精度浮点数public Guid GetGuid(int i);//获取指定字段的GUID值public Short GetInt16 (int i);//获取指定字段的16位有符号整数值public long GetInt64(int i);//获取64位指定字段的有符号整数值public string GetString (int i);//获取指定字段的字符串值public object GetValue ( int i);//返回指定字段的值public int GetValues (object[ ]values);//将当前记录值按顺序填充到数组中,并返回实际数public bool IsDBNull(int i);//返回指定字段是否设置为null 特别附加说明

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

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

3. 如何使用ADO.NET操作数据库

以SQLServer为例,创建Connection:

using System.Data;using System.Data.SqlClient;//Sql Server命名空间string connectStr='';IDbConnection connection=new SqlConnection(connectStr);在.NET Framework中,上面的代码是正确的,因为.NET Framework内置了SQL Server数据访问程序,即数据驱动。但在.NET Core中,需要将以下包的引用添加到项目中:

系统.数据.SqlClient

下面简单介绍一下Visual Studio安装包的使用方法:

如图,在【工具】-【NuGet包管理器】下找到管理解决方案的NuGet包,点击它。然后就会出现类似下面的图片:

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

选择第一项,然后勾选右侧添加包的项,点击安装。

好的,现在假设您已经安装了它。然后继续下一步:

执行查询语句:

从演示中选择名称;创建命令:

C#数据操作系列2.ADO.NET操作

此时创建Command有以下几种方式:

IDbCommand 命令=连接.CreateCommand(); //通过连接创建命令IDbCommand command=new SqlCommand(); //简单地创建一个命令对象IDbCommand command=new SqlCommand(sql,connection); //初始化时,指定要执行的SQL和要连接的Connection。如果创建Command时没有指定连接和要执行的SQL语句,则必须在获取Reader之前手动设置。

现在找一个读者:

IDataReader 阅读器=command.ExecuteReader();如果只想执行SQL而不关心返回的内容,可以调用以下方法:

intlines=command.ExecuteNonQuery(); //获取受影响的行数。该方法适用于DML类型的SQL语句或者增删改查的SQL语句。

如果是查询语句,则需要获取Reader,然后通过Reader获取对应的值。

4. 实践

简单讲解了SQL之后,我们通过实际练习将之前所学的知识联系起来。

a.创建一个表

var connectStr='';var sql=@'create table demo([key] int Identity Primary Key, [name] varchar(20))';IDbConnection 连接=new SqlConnection(connectStr);IDbCommand command=connection.CreateCommand() ;connection.Open();//打开链接command.CommandText=sql;//赋值sqlvar result=command.ExecuteNonQuery();//获取返回的int值,即-1connection.Close();//记住使用后关闭链接关于ExcuteNonQuery的返回值,微软在官方文档中给出了这样的描述:

对于UPDATE、INSERT 和DELETE 语句,返回值是受命令影响的行数。对于所有其他类型的语句,返回值为-1。

所以这里的返回值为-1。

b.添加一条数据

与创建表类似,区别在于使用的SQL语句。在C#中,使用ADO.NET向数据库添加值时,需要手动拼接SQL语句进行操作。

代码如下:(假设使用上例创建的表)

拼接SQL:

C#数据操作系列2.ADO.NET操作

var value1='测试';var sql=@$'insert into demo(name) values('{value1}');';///====或var sql=string.Format('insert into demo(名称) 值('{0}');', '测试');注意SQL语句拼接过程中的单引号,这意味着SQL中中间有一个字符串。 SQL具有很强的将字符串转换为相应字段类型的能力,因此可以统一传递给数据库字符串。

执行SQL:

var connectStr='';IDbConnection 连接=new SqlConnection(connectStr);IDbCommand 命令=connection.CreateCommand();connection.Open();command.CommandText=sql;var result=command.ExecuteNonQuery();connection.Close() ;如果这次没有执行错误,则返回1。

c.修改记录

例如修改demo中名为test的数据,将其名称改为demo:

var connectStr='';var sql='更新演示集name='demo' where name='Test'';IDbConnection 连接=new SqlConnection(connectStr);IDbCommand command=connection.CreateCommand();connection.Open(); command.CommandText=sql;var result=command.ExecuteNonQuery();Console.WriteLine(结果);connection.Close();其中result 表示受SQL 影响的表中的数据行数。

d.删除记录

var sql='删除表演示,其中name='Test';IDbConnection 连接=new SqlConnection(connectStr);IDbCommand command=connection.CreateCommand();connection.Open();command.CommandText=sql;var result=command. ExecuteNonQuery();Console.WriteLine(结果);connection.Close();e.询问

我将在这里给您一个提示,但您可以自己尝试ADO.NET 查询。

5. 说明

第四部分提到了连接字符串。对于C#,不同的数据库应该有不同的连接字符串。因为这是C#连接数据库的命令或者按键。

我们简单介绍一下连接字符串,它是一个由分号分隔的键值对列表。格式如下:

关键字1=值; keywords2=value;以下是标准的SQL Server 连接字符串:

保留安全信息=False;用户ID=*****;密码=*****;初始目录=AdventureWorks;服务器=MySqlServer其中:

用户评论

强辩

这个C#数据操作系列真的帮了我大忙,尤其是ADO.NET这部分,操作起来比我想象的要简单多了。

    有19位网友表示赞同!

红尘烟雨

看了这篇文章,我对ADO.NET有了更深入的了解,感谢作者的详细讲解。

    有16位网友表示赞同!

不浪漫罪名

哎呀,这篇关于C#数据操作系列2的文章太及时了,我刚接触ADO.NET,正愁不知道怎么入手呢。

    有16位网友表示赞同!

安陌醉生

这个系列文章写得太好了,我之前对ADO.NET一窍不通,现在感觉有点信心了。

    有12位网友表示赞同!

发呆

作者这个C#数据操作系列真的太棒了,特别是ADO.NET这部分,解决了我很多疑问。

    有13位网友表示赞同!

作业是老师的私生子

学习了,原来ADO.NET操作可以这样简单,之前真是想不明白。

    有19位网友表示赞同!

自繩自縛

这篇C#数据操作系列2的文章太实用了,我已经收藏了,以后肯定还会再看。

    有18位网友表示赞同!

伱德柔情是我的痛。

这篇关于ADO.NET的操作文章,让我这个新手也学会了如何进行数据操作,太感谢了。

    有17位网友表示赞同!

病房

虽然我对C#不是很熟悉,但这个数据操作系列让我有了学习下去的动力。

    有20位网友表示赞同!

孤者何惧

作者写得太详细了,尤其是ADO.NET操作的部分,让我这个编程小白也能看懂。

    有11位网友表示赞同!

百合的盛世恋

这个C#数据操作系列真的很不错,尤其是ADO.NET这部分,让我对数据操作有了全新的认识。

    有9位网友表示赞同!

像从了良

这篇文章让我对ADO.NET有了新的理解,之前总觉得数据操作很复杂,现在觉得简单多了。

    有5位网友表示赞同!

青山暮雪

这个C#数据操作系列的文章,尤其是ADO.NET的操作部分,让我这个编程菜鸟也有了进步。

    有10位网友表示赞同!

傲世九天

这篇文章真是帮了我大忙,我之前对ADO.NET的操作一窍不通,现在感觉有点头绪了。

    有12位网友表示赞同!

呆萌

作者这个C#数据操作系列太有用了,我已经分享给我的同事了,希望也能帮到他们。

    有19位网友表示赞同!

呆檬

这个系列文章写得太好了,我之前对ADO.NET的操作一头雾水,现在感觉清晰多了。

    有16位网友表示赞同!

淡抹烟熏妆丶

这篇C#数据操作系列2的文章,让我这个编程新手对ADO.NET有了新的认识,感谢作者。

    有18位网友表示赞同!

枫无痕

作者这篇关于C#数据操作系列2的文章,让我对ADO.NET的操作有了新的理解,真是受益匪浅。

    有17位网友表示赞同!

一生只盼一人

这个C#数据操作系列的文章太有用了,我之前对ADO.NET的操作感到很困惑,现在感觉明朗多了。

    有10位网友表示赞同!

一个人的荒凉

这篇关于ADO.NET操作的文章,让我对C#的数据操作有了新的认识,感觉学到了很多。

    有18位网友表示赞同!

为您推荐

....