C#读取数据库返回泛型集合详解(DataSetToList)

yizhihongxing

C#读取数据库返回泛型集合是一种常见的数据访问方式,可以快速、高效地将数据库里的数据以泛型集合的方式返回给程序,本文将详细讲解如何使用DataSetToList实现这一功能。

准备工作

在使用DataSetToList读取数据库前,需要进行一些准备工作,具体如下:

1.引用相关命名空间

在代码文件中,需要引用以下命名空间:

using System.Data;
using System.Reflection;
using System.Collections.Generic;

2.定义泛型实体类

定义一个与数据库表相对应的泛型实体类(如Person),其中包含了表中的所有字段,并在类中为每个字段创建相应的属性。

数据库连接与读取

使用DataSetToList读取数据库需要进行数据库连接与读取的操作,具体如下:

1.创建数据库连接对象

创建一个与数据库连接的对象,代码如下:

SqlConnection conn = new SqlConnection("Data Source=.;Database=test;user id=sa;password=123");

2.创建数据库读取命令对象

创建一个数据库读取命令对象Command,通过该对象指定要执行的数据库sql语句,以及与数据库连接对象建立关联。

SqlCommand cmd = new SqlCommand("SELECT * FROM Person", conn);

3.创建数据适配器对象

创建一个数据适配器DataAdapter,用于将数据从数据源读取到DataSet对象中,并存在一个表中。代码如下:

SqlDataAdapter adapter = new SqlDataAdapter(cmd);

4.填充DataSet对象

使用DataAdapter的Fill方法,将数据库表的数据填充到DataSet中,代码如下:

DataSet ds = new DataSet();
adapter.Fill(ds);

DataSetToList转换

将DataSet对象转换为泛型集合,可以使用DataSetToList方法,具体的代码和示例说明如下:

1.定义DataSetToList方法

在代码文件的类中,添加以下方法:

public static List<T> DataSetToList<T>(DataSet ds)
{
    List<T> list = new List<T>();
    foreach (DataRow dr in ds.Tables[0].Rows)
    {
        T t = Activator.CreateInstance<T>();
        PropertyInfo[] propertyInfoList = t.GetType().GetProperties();
        foreach (PropertyInfo propertyInfo in propertyInfoList)
        {
            if (ds.Tables[0].Columns.Contains(propertyInfo.Name))
            {
                if (!Convert.IsDBNull(dr[propertyInfo.Name]))
                {
                    propertyInfo.SetValue(t, dr[propertyInfo.Name], null);
                }
            }
        }
        list.Add(t);
    }
    return list;
}

方法DataSetToList()接收一个DataSet对象,返回一个泛型集合List,其中T是被序列化的类。

2.使用DataSetToList方法

代码如下:

public class Program
{
    static void Main(string[] args)
    {
        SqlConnection conn = new SqlConnection("Data Source=.;Database=test;user id=sa;password=123");
        SqlCommand cmd = new SqlCommand("SELECT * FROM Person", conn);
        SqlDataAdapter adapter = new SqlDataAdapter(cmd);
        DataSet ds = new DataSet();
        adapter.Fill(ds);

        List<Person> list = DataSetExtensions.DataSetToList<Person>(ds);
        foreach (Person item in list)
        {
            Console.WriteLine(item.ID + "," + item.Name + "," + item.Age);
        }
    }
}

以上就是使用DataSetToList实现C#读取数据库返回泛型集合的完整攻略,希望对大家有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#读取数据库返回泛型集合详解(DataSetToList) - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • 找到整型阵列中最大值和最小值的几种方法总结

    当我们需要在整数数组中查找最大值和最小值时,有多种方法可以实现。本文将总结其中的几种方法并进行详细讲解。 方法一:遍历数组 最简单的方法就是遍历整个数组并查找最大值和最小值。我们可以使用两个变量来记录当前的最大值和最小值,然后遍历整个数组,对于每个元素,分别与最大值和最小值进行比较,如果比最大值大就更新最大值,如果比最小值小就更新最小值。最终遍历完成后,最大…

    C# 2023年6月7日
    00
  • .Net使用Cancellation Framework取消并行任务

    .Net使用Cancellation Framework取消并行任务的攻略 在编写并行代码时,我们通常会遇到需要取消一组任务的情况,为此 .Net 提供了一套名为 “Cancellation Framework” 的机制来进行任务取消管理。本文将详细介绍 .Net 的 Cancellation Framework 的使用方法,同时提供两个示例以帮助理解。 C…

    C# 2023年6月3日
    00
  • 深入浅析C# 11 对 ref 和 struct 的改进

    深入浅析C# 11 对 ref 和 struct 的改进 简介 C# 11 是微软新推出的一项编程语言的更新版本,其中包含了对于 ref 和 struct 的一些优化改进。此次改进旨在提高代码的运行效率并降低代码运行的堆内存的占用。为了能够更好地理解这些改进,需要先了解 ref 和 struct 的相关知识。 ref 和 struct 在 C# 中,ref …

    C# 2023年6月6日
    00
  • C#实现十六进制与十进制相互转换以及及不同进制表示

    C#实现十六进制与十进制相互转换以及不同进制表示 概述 在C#编程中,时常需要对数字进行不同进制的表示和相互转换。其中,比较常见的是十六进制和十进制的转换。下面就是C#实现十六进制与十进制相互转换以及不同进制表示的完整攻略。 十进制转十六进制 在C#中,可以使用ToString方法将一个十进制数转为十六进制格式的字符串。如下例: int decNum = 2…

    C# 2023年6月7日
    00
  • C#类的创建与初始化实例解析

    C# 是一种面向对象的编程语言,它的类是其最重要的组成单元。在 C# 中,类可以被定义为模板或蓝图,用来描述一个对象需要包含哪些属性和行为。本文将介绍如何创建和初始化 C# 类的实例,以及解析这些实例的一些常见方法。 创建 C# 类 要创建一个 C# 类,需要遵循以下步骤: 使用 class 关键字定义类的名称,如: public class MyClass…

    C# 2023年5月31日
    00
  • Unity调用打印机打印图片

    关于“Unity调用打印机打印图片”的完整攻略,我将分为以下几个部分详细介绍: 需求分析 Unity调用打印机的底层实现原理 Unity调用打印机打印图片的具体操作步骤 示例演示 需求分析 在我们的日常项目中,可能会有需要在Unity3d中实现打印图片的需求,例如实现游戏中的截图功能,或者游戏中的特定场景需要将当前画面截取下来并打印出来。因此,本文将介绍如何…

    C# 2023年5月15日
    00
  • C# WinForm程序完全退出的问题解决

    我将为您详细讲解“C# WinForm程序完全退出的问题解决”的完整攻略。 1. 问题描述 在使用 C# WinForm 开发应用程序时,通常需要实现程序完全退出的功能。但是,直接使用 this.Close() 或者 Application.Exit() 等方法退出程序时,往往会出现程序并未完全退出的问题,即程序在关闭窗口后仍然在运行,导致后续操作不能顺利进…

    C# 2023年6月7日
    00
  • 可替代log4j日志的c#简单日志类队列实现类代码分享

    下面是详细讲解“可替代log4j日志的c#简单日志类队列实现类代码分享”的完整攻略。 简介 在进行软件开发时,记录代码执行的日志信息对于调试和问题排查都是非常有帮助的。log4j是一个非常流行的Java日志框架,但在.NET开发中,我们也需要一种轻量级的日志类来记录日志信息。本文将分享一种基于队列实现的C#简单日志类。 实现原理 该日志类的实现借鉴了log4…

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