我试图通过复制我喜欢的网站上的功能来自学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部分可能不正确。一旦解决了,我将继续努力。
答案 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())