【问题标题】:Creating list of Objects from Database从数据库创建对象列表
【发布时间】:2014-05-22 12:38:06
【问题描述】:

在以下问题中,我从 Dummy01 的另一个答案中“窃取”了一些代码: How can I populate a list with values from a SQL Server database?

问题是我想得到一个对象列表而不是字符串

我必须如何修改此代码才能这样做?非常感谢您的帮助。

问题出现在这部分代码不知道指定什么类型的地方。

  if (!reader.IsDBNull(0))
                        tagsList.Add(reader.GetString(0));

代码:

private void LoadList()
{
    List<string> tagsList = new List<string>();

    using (IDbConnection connection = new SqlConnection(Properties.Settings.Default.DBConnectionString))
    {
        connection.Open();    

        using (IDbCommand command = connection.CreateCommand())
        {
            command.CommandText = "SELECT TAGCOLUMN FROM TAGSTABLE";

            using (IDataReader reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    if (!reader.IsDBNull(0))
                        tagsList.Add(reader.GetString(0));
                }

                reader.Close();
            }
        }

        connection.Close();
    }
}

【问题讨论】:

  • .NET 中的字符串是一个对象。实际上 .NET 派生形式 System.Object 中的所有类型。我无法得到你想要的excalty。您的意思是自定义对象,您已声明的类吗?什么?谢谢
  • 您希望在集合中获得哪种类型的对象?

标签: c# sql database list object


【解决方案1】:

因此,如果您想获取我提交给您的想要使用 Dapper 的对象列表。您可以通过 NuGet 在您的项目中获取 Dapper。完成后,您需要构建一个模仿 SELECT 语句的类。为了争论,假设您的 SELECT 声明是:

SELECT * FROM TagsTable

假设TagsTable 看起来像这样:

public class TagsTable
{
    public int Id { get; set; }
    public string Tag { get; set; }
}

(请记住,这只是为了向您展示它是如何工作的)

现在您的代码如下所示:

private void LoadList()
{
    List<TagsTable> tagsList;

    using (IDbConnection connection =
        new SqlConnection(Properties.Settings.Default.DBConnectionString))
    {
        tagsList = connection.Query<TagsTable>(sqlStatement);
    }
}

这里的Query 方法是一个扩展方法,它挂在IDbConnection 之外;这就是 Dapper 的工作方式。不仅代码简洁,映射为您完成,而且 Dapper 很快。

【讨论】:

  • 对不起,如果您愿意,我需要更多解释。我似乎无法真正理解这个概念。我需要一个的列表,但是这部分要写什么?很抱歉我无法理解简单的指令:) tagsList = connection.Query(sqlStatement);不明白该用自己的陈述换掉什么。
  • @Matt,所以这里的 TagsTable 变成了 Movie,sqlStatement 中的值变成了对 Movie 表的查询。 Google Dapper dot net 获取有关 API 的更多说明,因为它们也可以使用非常简单的 API 生成参数化 SQL 语句(例如,传入带有参数化过滤器的 WHERE 子句)。
【解决方案2】:

您是否尝试过将贴花 &lt;string&gt; 更改为 &lt;object&gt;,因为它对我来说效果很好

【讨论】:

    【解决方案3】:

    只需构造你要实例化的类型的实例,并根据reader返回的数据设置它的属性。

    【讨论】:

      猜你喜欢
      • 2015-10-14
      • 1970-01-01
      • 2020-12-20
      • 1970-01-01
      • 2013-05-25
      • 2011-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多