IListSource或IEnumerable错误

时间:2013-06-13 02:54:01

标签: c# asp.net sql-server

我试图通过复制我喜欢的网站上的功能来自学C#。

我有一个ASP Repeater(称为newsRepearer)来显示一些新闻。它工作正常,直到我拿出基于ASP的SQL数据源并将其放在Code Behind中,以便我可以设置一个变量(通过文本框输入)来显示一定数量的前几天的新闻和实现它在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部分可能不正确。一旦解决了,我将继续努力。

2 个答案:

答案 0 :(得分:4)

您需要将转发器绑定到实现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();
        }
    }
}

答案 1 :(得分:0)

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

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