如何让 SQL Server 表存储一个列表?

Posted

技术标签:

【中文标题】如何让 SQL Server 表存储一个列表?【英文标题】:How get SQL Server table to be store a list? 【发布时间】:2020-08-05 23:21:14 【问题描述】:

作为 java 开发人员,这很容易实现。但我无法在 C# 中实现它。我想从 SQL Server 数据库中获取数据并将它们存储在一个对象类型的列表中以满足表的需求。

对象:

class Category

    public int Id  get; set; 
    public string Name  get; set; 

和数据库中的表:

和代码:

public List<Category> GetCategoryList() 

        connect.Open();

        SqlCommand cmd = new SqlCommand("Select * From Category", connect);

        int i = cmd.ExecuteNonQuery();

        connect.Close();

我相信有一个名为 DataReader 的东西我必须使用它,但我找不到解释或示例说明如何在像我这样的情况下使用它

【问题讨论】:

这能回答你的问题吗? Getting Data from SQL and putting in a list 阅读 Dapper。简短的回答 - 使用 Dapper(或其他轻量级 ORM)而不是 ADO.NET。 这将类似于使用 Hibernate,但要简单一些。 您也可以只填写一个数据表并减少转换为List&lt;T&gt;的开销 @ŇɏssaPøngjǣrdenlarp 数据表本身有相当大的开销。 你觉得 Dapper @AbdallahRizk 怎么样? 【参考方案1】:
public List<Category> GetCategoryList() 

    List<Category> columnData = new List<Category>();
    using (SqlConnection connection = new SqlConnection(connectionString))
    
        connection.Open();
        SqlCommand cmd = new SqlCommand("Select * From Category", connect);
        using (SqlDataReader reader = cmd.ExecuteReader())
        
            while (reader.Read())
            
                columnData.Add(new Category 
                    Id= reader["Id"] is DBNull ? null : int.Parse(reader["Id"]),
                    Name = reader["Name"] is DBNull ? null : reader["Name"].ToString() 
                );
                     
        
    
    return columnData;

【讨论】:

连接也应该有它的使用块,或者用CommandBehavior.CloseConnection执行阅读器 Category(reader) 您已将问题的难点移至构造函数,并没有向 OP 显示该代码。 另外,cmd 对象应该被释放 Id 不可为空。另外,我怀疑如果int.Parse 已经int,则不需要它。

以上是关于如何让 SQL Server 表存储一个列表?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server / Delphi:如何使用表变量类型将整数列表作为参数传输?

如何在 SQL Server 数据库中存储列表

将本地数据插入 SQL Server 临时表

如何从 SQL Server 中的存储过程中检索参数列表

sql server存储过程如何动态生成表名

SQL SERVER如何查看一个表被哪些存储过程用到?用哪个系统存储过程?