0

我正在尝试通过在我喜欢的网站上复制功能来自学 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 部分可能不正确。一旦解决了这个问题,我将继续努力。

4

2 回答 2

3

您需要将转发器与实现 IListSource 或 IEnumerable 接口的对象绑定,SqlCommand 类不符合该条件;但是 DataSet 可以。所以试试这个:

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();
        }
    }
}
于 2013-06-13T03:02:23.457 回答
0

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

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

于 2013-06-13T03:39:24.613 回答