2

希望有人能告诉我为什么这不起作用。我给出一个TextBox默认值,然后使用查询选择 * 7 天内的位置。我以为我有这个工作,但显然现在不是,我没有改变它,所以当我看到它工作时一定是在想象它。用户可以在文本框中输入一个整数,并使用它来修改查询中的参数。它连接一个减号,因此默认情况下传递给查询的参数是-7,但无论值如何(我调试并确保传递的值是-7默认值)。而且我知道它不起作用,因为数据库中有超过 7 天的条目。我是不是查询错了?

ASPX

<asp:TextBox ID="newsDaySelector" runat="server" AutoPostBack="true" Width="20" Text="7"></asp:TextBox>

代码背后

using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SFGSConnectionString1"].ConnectionString))
{
    using (SqlCommand cmd = new SqlCommand("SELECT * FROM vw_front_news WHERE newsDateStamp < DATEDIFF(day,@newsDate,GETDATE()) ORDER BY newsDateStamp DESC", conn))
    {
        int newsDate = Convert.ToInt32("-" + newsDaySelector.Text);
        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();
    }
}
4

3 回答 3

3

使用 dateadd 而不是 datediff -

dateadd(day,datediff(day,0,GetDate()) + 7,0) 
于 2013-07-12T05:46:20.557 回答
2

查询问题

@newsDate = -7

SELECT * FROM vw_front_news WHERE newsDateStamp >= DATEADD(day,@newsDate,GETDATE())  and newsDateStamp <= GETDATE() ORDER BY newsDateStamp DESC

或者

SELECT * FROM vw_front_news WHERE DATEDIFF(D,GETDATE(),newsDateStamp ) > @newsDate ORDER BY newsDateStamp DESC
于 2013-07-12T05:33:33.487 回答
1

尝试更改您的查询 -

SELECT *
FROM vw_front_news
WHERE newsDateStamp BETWEEN DATEADD(DAY, -@newsDate, GETDATE()) AND GETDATE()
ORDER BY newsDateStamp DESC
于 2013-07-12T05:31:02.883 回答