0

アーカイブを構築するために日付ごとにブログ投稿を取得しようとしています。より具体的には、2012 年 7 月、2012 年 8 月など、月ごとにデータを表示したいと考えています。そして、ああ、私を初心者だと考えてください。

データは、ラベルの日付をレンダリングする ListView によって取得され、ラベル テキスト (例: Juni、2012) は、現在苦労しているコード ビハインドで新しい SP に転送されます。LIKE 句を使用して日付フィールドでパラメータをチェックしようとしていますが、パラメータ「juli」で SP を試すと、どういうわけか 6 月と 7 月の両方が取得されます。データ型が少し混乱します。この状況で何を使用すればよいかわかりません。

SP: param データ型から長さを除外しました。長さが定義されている場合は任意のデータが得られますが、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

2 つの日付の間のデータを取得する場合は、次のことを試してください。

@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 に答える