【问题标题】:SQL Server query in ADO.NET only returning one resultADO.NET 中的 SQL Server 查询仅返回一个结果
【发布时间】:2015-09-10 15:06:24
【问题描述】:

我正在用 ado.net 学习 asp.net mvc,我的存储库类中有这个方法

public IEnumerable<int?> GetAllUniqueYears()
{
    using (IDbConnection dbConnection = dbConnectionFactory.CreateConnection())
    {
        using (IDbCommand cmd = dbConnection.CreateCommand())
        {
            cmd.CommandText = "SELECT DISTINCT YEAR(DateAdded) As Year FROM GeoCounters";
            cmd.CommandTimeout = 1000;

            using (IDataReader reader = cmd.ExecuteReader())
            {
                if (!reader.Read())
                {
                    yield return null;
                }
                else
                {
                    yield return (int)reader["Year"];
                }
            }
        }
    }
}

当我加载我的视图时,它只有一个结果,但是当我在 SQL Server Management Studio 中运行查询时,有 4 个结果

控制器动作

public ActionResult Index()
{
        HomeIndexViewModel model = new HomeIndexViewModel()
        {
            GeoCounterDefinitions = geodefrepo.GetAll()
            .Select((x,y) => new SelectListItem
                {
                    Text = x.Id + " " + x.FriendlyDesc,
                    Value = (y + 1).ToString()
                }),
            Years = geocounterrepo.GetAllUniqueYears()
            .Select(x => new SelectListItem
            {
                Text = x.ToString(),
                Value = x.ToString()
            })
        };

        return View(model);
    }

【问题讨论】:

    标签: sql-server asp.net-mvc ado.net


    【解决方案1】:

    你需要一个while循环。

    using (IDataReader reader = cmd.ExecuteReader())
    {
       while (reader.Read())
       {
          yield return (int)reader["Year"];
       }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多