DataReader、DataSet、DataAdapter和DataView使用介绍

yizhihongxing

DataReader、DataSet、DataAdapter和DataView是数据访问中常用的几个对象,下面我会详细介绍它们的作用和使用方法。

一、DataReader

DataReader是一种只读的、前向的数据流,用于对数据库进行查询操作。它可以一行一行地读取查询结果,不支持对数据进行修改,适用于大数据量查询,可以最大程度减少内存占用。使用DataReader进行数据读取的基本步骤如下:

  1. 使用Connection对象打开数据库连接。
  2. 创建Command对象并设置CommandText属性为查询语句。
  3. 使用Command对象创建DataReader对象,通过ExecuteReader方法执行查询。
  4. 调用DataReader对象的Read方法进行数据读取,直到Read返回false,则表示已读取完所有数据。
  5. 使用DataReader对象的GetXXX方法(如GetBoolean、GetInt32等方法)获取当前行指定列的值。

以下是一个示例代码,用于从数据库中读取数据并输出到控制台:

using (SqlConnection conn = new SqlConnection(connectionString))
{
    conn.Open();
    using (SqlCommand cmd = new SqlCommand("SELECT * FROM Students", conn))
    {
        using (SqlDataReader reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                Console.WriteLine("{0}\t{1}\t{2}", reader.GetInt32(0), reader.GetString(1), reader.GetInt32(2));
            }
        }
    }
}

二、DataSet

DataSet是一个数据缓存对象,用于存储查询结果和关系型数据。它可以将查询结果存储到内存中,支持对数据进行修改、排序、过滤等操作,并可以将修改后的数据保存到数据库中。使用DataSet进行数据读取的基本步骤如下:

  1. 使用Connection对象打开数据库连接。
  2. 创建Command对象并设置CommandText属性为查询语句。
  3. 使用DataAdapter对象(下面会介绍)的Fill方法,将查询结果填充到DataSet中。
  4. 使用DataSet对象的Tables属性获取数据表,使用Rows属性获取数据行,使用Columns属性获取数据列。
  5. 修改DataSet中的数据。
  6. 使用DataAdapter对象的Update方法,将修改后的数据保存到数据库中。

以下是一个示例代码,用于从数据库中读取数据并将修改后的数据保存到数据库中:

using (SqlConnection conn = new SqlConnection(connectionString))
{
    conn.Open();
    using (SqlCommand cmd = new SqlCommand("SELECT * FROM Students", conn))
    {
        using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
        {
            DataSet ds = new DataSet();
            adapter.Fill(ds);

            foreach (DataRow row in ds.Tables[0].Rows)
            {
                row["Score"] = (int)row["Score"] + 10; // 修改数据
            }

            SqlCommandBuilder builder = new SqlCommandBuilder(adapter); // 自动生成更新语句
            adapter.Update(ds); // 保存修改后的数据到数据库中
        }
    }
}

三、DataAdapter

DataAdapter是一个连接数据库和DataSet之间的桥梁,用于填充DataSet和将修改后的数据保存到数据库中。它可以执行查询操作、插入操作、更新操作和删除操作,支持对数据进行排序、过滤等操作。使用DataAdapter进行数据读取和保存的基本步骤如下:

  1. 使用Connection对象打开数据库连接。
  2. 创建Command对象并设置CommandText属性为查询语句或更新语句。
  3. 创建DataAdapter对象,并使用Command属性设置DataAdapter对象的查询命令或更新命令。
  4. 使用DataAdapter对象的Fill方法,将查询结果填充到DataSet中(若是更新操作,则无需Fill)。
  5. 修改DataSet中的数据。
  6. 使用DataAdapter对象的Update方法,将修改后的数据保存到数据库中。

以下是一个示例代码,用于使用DataAdapter执行查询和插入操作:

using (SqlConnection conn = new SqlConnection(connectionString))
{
    conn.Open();
    using (SqlDataAdapter adapter = new SqlDataAdapter())
    {
        adapter.SelectCommand = new SqlCommand("SELECT * FROM Students", conn);
        adapter.InsertCommand = new SqlCommand("INSERT INTO Students (Name, Age, Score) VALUES (@Name, @Age, @Score)", conn);
        adapter.InsertCommand.Parameters.Add("@Name", SqlDbType.NVarChar, 50, "Name");
        adapter.InsertCommand.Parameters.Add("@Age", SqlDbType.Int, 0, "Age");
        adapter.InsertCommand.Parameters.Add("@Score", SqlDbType.Int, 0, "Score");

        DataSet ds = new DataSet();
        adapter.Fill(ds); // 将查询结果填充到DataSet中

        DataRow row = ds.Tables[0].NewRow(); // 创建新行
        row["Name"] = "David";
        row["Age"] = 20;
        row["Score"] = 80;
        ds.Tables[0].Rows.Add(row);

        adapter.Update(ds); // 将新行插入到数据库中
    }
}

四、DataView

DataView是基于DataSet的一个数据视图对象,用于对DataSet中的数据进行排序、过滤等操作。它可以将DataSet中的数据按照指定的条件进行排序,或者根据指定的条件进行筛选。使用DataView进行数据筛选的基本步骤如下:

  1. 使用Connection对象打开数据库连接。
  2. 创建Command对象并设置CommandText属性为查询语句。
  3. 使用DataAdapter对象将查询结果填充到DataSet中。
  4. 使用DataSet对象的Tables属性获取数据表,使用DefaultView属性获取数据视图。
  5. 使用DataView对象的Sort属性和RowFilter属性,对数据进行排序和筛选。

以下是一个示例代码,用于排序和筛选DataSet中的数据:

using (SqlConnection conn = new SqlConnection(connectionString))
{
    conn.Open();
    using (SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Students", conn))
    {
        DataSet ds = new DataSet();
        adapter.Fill(ds); // 将查询结果填充到DataSet中

        DataView dv = ds.Tables[0].DefaultView; // 获取数据视图
        dv.Sort = "Score DESC"; // 按Score降序排列
        dv.RowFilter = "Age > 18"; // 筛选年龄大于18的数据

        foreach (DataRowView row in dv)
        {
            Console.WriteLine("{0}\t{1}\t{2}", row["Id"], row["Name"], row["Score"]);
        }
    }
}

以上就是对DataReader、DataSet、DataAdapter和DataView的详细介绍和使用方法,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:DataReader、DataSet、DataAdapter和DataView使用介绍 - Python技术站

(0)
上一篇 2023年6月6日
下一篇 2023年6月6日

相关文章

  • .NET 6中的dotnet monitor讲解

    .NET 6中的dotnet monitor讲解攻略 在本攻略中,我们将深入讲解.NET 6中的dotnet monitor,并提供两个示例说明。 什么是dotnet monitor? dotnet monitor是一个用于监视.NET应用程序的命令行工具。它可以帮助开发人员快速识别和解决应用程序中的问题,例如内存泄漏、CPU使用率过高等。 如何安装dotn…

    C# 2023年5月17日
    00
  • C#基础知识之base关键字介绍

    C#基础知识之base关键字介绍 在C#中,base关键字用于访问基类成员(在派生类中),并调用基类的构造函数。本文将详细介绍base关键字的使用方法。 base关键字用法 1.访问基类成员 当派生类中存在与基类同名的方法或属性时,此时需要使用base关键字来访问基类中同名的方法或属性。 以下是一个示例代码: public class BaseClass {…

    C# 2023年6月3日
    00
  • 基于C#的图表控件库 ScottPlot编译visual studio 2022

    以下是关于基于C#的图表控件库 ScottPlot编译visual studio 2022的完整攻略,过程中会包含两条示例说明: 准备工作 在开始编译ScottPlot之前,你需要准备以下环境: 安装Visual Studio 2022 IDE,可以从官方网站下载并安装。 安装.NET Core SDK,可以从官方网站下载并安装。 编译ScottPlot 打…

    C# 2023年6月7日
    00
  • .NET发送邮件的实现方法示例

    下面是“.NET发送邮件的实现方法示例”的完整攻略: 前言 在现代应用程序开发中,发送邮件是一项非常重要的任务。而在.NET框架中,发送邮件是非常简单的。本篇文章将介绍如何使用.NET框架发送邮件。 1. 创建SMTP客户端 .NET框架有一个SMTPClient类,可以用来与SMTP服务器通信。以下代码演示了如何创建一个SMTP客户端: SmtpClien…

    C# 2023年5月31日
    00
  • .NET Core系列之MemoryCache 缓存选项

    .NET Core系列之MemoryCache 缓存选项 在.NET Core中,MemoryCache是一种内存缓存,可用于缓存应用程序中的数据。MemoryCache提供了多种缓存选项,可以根据应用程序的需求进行配置。本攻略将介绍MemoryCache的缓存选项,包括缓存过期、缓存优先级、缓存回调等,并提供两个示例说明。 缓存过期 在MemoryCach…

    C# 2023年5月16日
    00
  • C# Linq的Last()方法 – 返回序列中的最后一个元素

    C#的Linq是一种强大的查询语言,可在许多情况下极大简化代码。其中一个用于筛选序列中的元素的方法是Last()。在这篇文章中,我们将详细探讨如何使用C#的Linq Last()方法,并提供至少两个代码示例,以帮助您更好地理解它的工作原理。 Last() 方法的介绍 Last() 是一个用于从给定的序列中筛选出最后一个元素的方法。如果找不到符合要求的元素,则…

    C# 2023年4月19日
    00
  • ASP.NET Core MVC通过IActionFilter.OnActionExecuting方法,获取Controller的Action方法参数值

    用过ASP.NET Core MVC中IActionFilter拦截器的开发人员,都知道这是一个非常强大的MVC拦截器。最近才发现IActionFilter的OnActionExecuting方法,甚至可以获取Controller的Action方法参数值。 假如我们在ASP.NET Core MVC项目中有一个HomeController,其中有一个Acti…

    C# 2023年4月24日
    00
  • C#中的DateTime是值类型还是引用类型

    C#中的DateTime是值类型还是引用类型是一个常见的问题,它的答案是:DateTime是值类型。以下是详细的解释: 在C#中,类型可以被分为值类型和引用类型两种。值类型在栈上分配内存并且存储它们的实例,它们之间没有共享数据的方式。引用类型在堆上分配内存并且存储一个指向它们的实例的引用。值类型的示例包括:int、double、bool、struct、enu…

    C# 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部