IListSource or IEnumerable error

本文关键字:error IEnumerable or IListSource | 更新日期: 2023-09-27 18:18:21

我正在尝试通过复制我喜欢的网站的功能来自学c#。

我有一个ASP中继器(称为newsRepearer)来显示一些新闻项目。它工作得很好,直到我拿出基于ASP的SQL数据源,并把它放在后面的代码,这样我就可以设置一个变量(通过文本框输入)来显示前几天的新闻,以及在WHERE查询中实现它。

当我运行这段代码时,我得到以下错误:

An invalid data source is being used for newsRepeater. A valid data source must implement either IListSource or IEnumerable.

protected void Page_Load(object sender, EventArgs e)
{
    int newsDate = -7;
    using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["IGSConnectionString1"].ConnectionString))
    {
        conn.Open();
        using (SqlCommand cmd = new SqlCommand("SELECT * FROM igs_news WHERE DATE(newsDate) = DATEDIFF(day,@newsDays)", conn))
        {
            cmd.Parameters.AddWithValue("@newsDate", newsDate);
            newsRepeater.DataSource = cmd;
            newsRepeater.DataBind();
        }
    }
}

我看到了错误,但不明白错误,也不明白IListSource和IEnumerable到底是什么。我做错了什么?

我知道WHERE部分可能不正确。一旦这个问题解决了,我会去解决的。

IListSource or IEnumerable error

您需要将您的中继器绑定到实现IListSource或IEnumerable接口的对象,SqlCommand类不符合该条件;但是数据集可以。所以试试这个:

protected void Page_Load(object sender, EventArgs e)
{
    int newsDate = -7;
    using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["IGSConnectionString1"].ConnectionString))
    {
        using (SqlCommand cmd = new SqlCommand("SELECT * FROM igs_news WHERE DATE(newsDate) = DATEDIFF(day,@newsDays)", conn))
        {
            cmd.Parameters.AddWithValue("@newsDate", newsDate);
            SqlDataAdapter da = new SqlDataAdapter();
            da.SelectCommand = cmd;
            DataSet ds = new DataSet();
            conn.Open();
            da.Fill(ds);
            conn.Close();
            newsRepeater.DataSource = ds;
            newsRepeater.DataBind();
        }
    }
}

只是为了供任何人将来参考,我很接近但不完全在那里与WHERE查询从数据库中选择最近7天的新闻项目。下面是我想要的

SELECT * FROM igs_news WHERE newsDate < DATEDIFF(day,@newsDate,GETDATE())