c# 数据库返回list

在C#中,可以使用SqlConnectionSqlCommand从数据库查询数据,并使用SqlDataReaderDataTable来读取返回的列表。

在C#中,从数据库返回List是一个常见的操作,以下是详细的步骤和示例代码:

c# 数据库返回list

一、准备工作

1、引入命名空间

using System.Data;:提供对数据的通用处理功能。

using System.Data.SqlClient;:如果是连接SQL Server数据库,需要此命名空间来使用相关的数据库连接和操作类,如果连接其他类型数据库,如MySQL,则需引入对应的MySQL客户端命名空间,如using MySql.Data.MySqlClient;

2、创建数据库连接字符串

对于SQL Server数据库,连接字符串的格式通常如下:

   string connectionString = "Server=服务器地址;Database=数据库名称;User Id=用户名;Password=密码;";

   string connectionString = "Server=localhost;Database=TestDB;User Id=sa;Password=123456;";

二、查询数据并返回List

1、创建数据表类

根据数据库表中的字段,创建一个对应的C#类,假设数据库中有一个名为Users的表,包含IdNameAge三个字段,可以创建一个User类来表示这个表的数据结构:

c# 数据库返回list

   public class User
   {
       public int Id { get; set; }
       public string Name { get; set; }
       public int Age { get; set; }
   }

2、编写查询方法

使用SqlConnection对象连接到数据库,使用SqlCommand对象执行查询语句,并将结果读取到List<T>中,以下是一个示例方法,用于从Users表中查询所有用户并返回一个List<User>

   public List<User> GetAllUsers()
   {
       List<User> users = new List<User>();
       using (SqlConnection connection = new SqlConnection(connectionString))
       {
           connection.Open();
           string sql = "SELECT Id, Name, Age FROM Users";
           SqlCommand command = new SqlCommand(sql, connection);
           using (SqlDataReader reader = command.ExecuteReader())
           {
               while (reader.Read())
               {
                   User user = new User();
                   user.Id = reader.GetInt32(reader.GetOrdinal("Id"));
                   user.Name = reader.GetString(reader.GetOrdinal("Name"));
                   user.Age = reader.GetInt32(reader.GetOrdinal("Age"));
                   users.Add(user);
               }
           }
       }
       return users;
   }

三、示例说明

1、建立连接

使用SqlConnection对象的构造函数传入连接字符串,创建与数据库的连接,在using语句块中打开连接,这样可以确保在使用完毕后自动关闭连接,释放资源。

2、执行查询

创建一个SqlCommand对象,将查询语句赋值给它的CommandText属性,并将连接对象赋值给它的Connection属性,然后调用ExecuteReader方法执行查询,返回一个SqlDataReader对象,用于读取查询结果。

3、读取数据

通过SqlDataReader对象的Read方法遍历查询结果的每一行,在循环内部,创建一个新的User对象,并使用GetInt32GetString等方法根据列名或列索引获取数据,然后将值赋给User对象的属性,最后将User对象添加到users列表中。

c# 数据库返回list

四、完整示例代码

以下是一个完整的示例程序,展示了如何在C#中使用上述方法从数据库中查询数据并返回一个List<User>

using System;
using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;
namespace DatabaseExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var users = GetAllUsers();
            foreach (var user in users)
            {
                Console.WriteLine($"Id: {user.Id}, Name: {user.Name}, Age: {user.Age}");
            }
        }
        public static List<User> GetAllUsers()
        {
            List<User> users = new List<User>();
            string connectionString = "Server=localhost;Database=TestDB;User Id=sa;Password=123456;";
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                connection.Open();
                string sql = "SELECT Id, Name, Age FROM Users";
                SqlCommand command = new SqlCommand(sql, connection);
                using (SqlDataReader reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        User user = new User();
                        user.Id = reader.GetInt32(reader.GetOrdinal("Id"));
                        user.Name = reader.GetString(reader.GetOrdinal("Name"));
                        user.Age = reader.GetInt32(reader.GetOrdinal("Age"));
                        users.Add(user);
                    }
                }
            }
            return users;
        }
    }
    public class User
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
    }
}

五、相关问答FAQs

1、问:如果数据库中的表结构发生变化,比如新增或删除了字段,应该如何修改代码?

答:如果数据库中的表结构发生变化,需要相应地修改C#中表示该表数据结构的类,如果表中新增了一个Email字段,需要在User类中添加一个Email属性,并在查询方法和读取数据时添加对该字段的处理,如果删除了某个字段,也需要从相应的类和代码中移除对该字段的引用。

2、问:如何处理查询过程中可能出现的异常,比如数据库连接失败或查询语句错误?

答:可以使用try-catch语句来捕获和处理异常,在建立数据库连接和执行查询的过程中,将代码放在try块中,如果出现异常,会在catch块中被捕获,可以根据具体的异常类型进行相应的处理,比如记录日志、提示用户等。

   try
   {
       using (SqlConnection connection = new SqlConnection(connectionString))
       {
           connection.Open();
           string sql = "SELECT Id, Name, Age FROM Users";
           SqlCommand command = new SqlCommand(sql, connection);
           using (SqlDataReader reader = command.ExecuteReader())
           {
               while (reader.Read())
               {
                   User user = new User();
                   user.Id = reader.GetInt32(reader.GetOrdinal("Id"));
                   user.Name = reader.GetString(reader.GetOrdinal("Name"));
                   user.Age = reader.GetInt32(reader.GetOrdinal("Age"));
                   users.Add(user);
               }
           }
       }
   }
   catch (SqlException ex)
   {
       Console.WriteLine($"SQL Exception: {ex.Message}");
   }
   catch (Exception ex)
   {
       Console.WriteLine($"Exception: {ex.Message}");
   }

六、小编有话说

在C#中从数据库返回List是一种非常实用的技术,它可以方便地将数据库中的数据读取到内存中进行处理和操作,通过合理地设计数据表类、正确编写查询方法和妥善处理异常,可以高效地实现这一功能,为应用程序的数据交互提供有力支持。

原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1592465.html

本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。

(0)
未希未希
上一篇2025-02-24 23:03
下一篇 2025-02-24 23:06

发表回复

您的电子邮箱地址不会被公开。必填项已用 * 标注

产品购买QQ咨询微信咨询SEO优化
分享本页
返回顶部
云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购  >>点击进入