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或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())