0

我正在尝试按日期获取博客文章以建立档案,更具体地说,我希望按一年中的月份呈现数据,例如 2012 年 7 月、2012 年 8 月等。哦,考虑我是一个新手。

数据由在标签中呈现日期的 ListView 检索,然后将标签文本(例如 Juni,2012)转发到我目前正在努力处理的代码隐藏中的新 SP。我正在尝试使用 LIKE 子句检查带有日期字段的参数,但是当我尝试使用参数“juli”的 SP 时,不知何故我得到了 June och July。它与数据类型有点混淆,我真的不知道在这种情况下使用什么。

SP:我已经将长度排除在参数数据类型之外,如果定义了长度,它会给我任何数据,但应该是 10。我还尝试将表中的日期时间转换为与@Date 有点相似的字符串,我对此有点迷失,对 LIKE 子句不太熟悉,所以请考虑我是新手。

@Date varchar
AS
BEGIN
    SELECT A.ArticleID, A.Name, A.Header, A.Article, A.Date, 
    C.Category, C.CategoryID,
    M.FirstName + ' ' + M.LastName as 'Author', A.ArticleLevel
    FROM Article as A
        LEFT JOIN Category as C on A.CategoryID = C.CategoryID
        LEFT JOIN Member as M ON A.MemberID = M.MemberID            
    WHERE CONVERT(VARCHAR(4), a.Date, 100) + CONVERT(VARCHAR(4), a.Date, 120) LIKE @Date + '%'
    ORDER BY A.Date, A.ArticleLevel Asc
END

exec [usp_GetArticlesForArticleDates] 'juli'

C#:“ArchiveArticlesListView”是嵌套的 ListView,用于呈现特定日期的文章。

protected void ArchiveListView_ItemDataBound(object sender, ListViewItemEventArgs e)
{
    if (e.Item.ItemType == ListViewItemType.DataItem)
    {
        var articleId = (int)ArchiveListView.DataKeys[e.Item.DataItemIndex].Value;
        //var dateParam = (int)ArchiveListView.DataKeys[e.Item.DataItemIndex].Value; // Tried to use the DataKey for Date and convert it to char, but that only left me with values like "309 j"

        var DateLabel = e.Item.FindControl("DateLabel") as Label;
        var date = DateLabel.Text;
        var articlesLV = e.Item.FindControl("ArchiveArticlesListView") as ListView;
        articlesLV.DataSource = Service.GetArticleArchive(date);
        articlesLV.DataBind();
    }
}
4

1 回答 1

0

如果要获取两个日期之间的数据,请尝试以下操作:

@Date datetime
@year datetime
AS
BEGIN
SELECT A.ArticleID, A.Name, A.Header, A.Article, A.Date, 
 C.Category, C.CategoryID,
 M.FirstName + ' ' + M.LastName as 'Author', A.ArticleLevel
 FROM Article as A
 LEFT JOIN Category as C on A.CategoryID = C.CategoryID
LEFT JOIN Member as M ON A.MemberID = M.MemberID            
 WHERE CONVERT(VARCHAR(4), a.Date, 100) + CONVERT(VARCHAR(4), a.Date, 120) =CONVERT(VARCHAR(4), @Date , 100) + CONVERT(VARCHAR(4), @year, 120)'
ORDER BY A.Date, A.ArticleLevel Asc
END
exec [usp_GetArticlesForArticleDates] 'juli','2012''

我认为这对你有用。

于 2012-07-25T09:09:49.420 回答