public partial class UserProfile : System.Web.UI.Page
{
private static int _userId = 0 ;
protected void Page_Load(object sender, EventArgs e)
{
string FoB;
if (Session["user"] != null)
{
_userId = DataManager.GetUserId(Session["user"].ToString());
}
string connection = WebConfigurationManager.ConnectionStrings["Database"].ConnectionString;
SqlConnection conn = new SqlConnection(connection);
SqlCommand comm = new SqlCommand("SELECT * from dbo.Rating where UserID=_userId", conn);
SqlDataReader reader;
conn.Open();
reader = comm.ExecuteReader();
reader.Read();
FoB = reader["GenreID"].ToString();
if(FoB=="1" )
{
FB.Text = reader["RatingValue"].ToString();
};
}
while (reader.HasRows);
reader.Close();
conn.Close();
}
}
我有一个名为rating
的表。它有4列
RatingId, UserID, GenreID,Rating value
我希望根据登录的当前用户和不同类型的不同评级值在标签上显示评级值。 UserID
和GenreID
是表Genre
和User
中的外键。
修改(评论)
CREATE TABLE [dbo].[Rating] (
[RatingID] INT IDENTITY (1, 1) NOT NULL,
[UserID] INT NULL, [GenreID] INT NOT NULL,
[RatingValue] INT NOT NULL,
PRIMARY KEY CLUSTERED ([RatingID] ASC),
CONSTRAINT [FK_Rating_Genre] FOREIGN KEY ([GenreID])
REFERENCES [dbo].[Genre] ([GenreID])
ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT [FK_Rating_User] FOREIGN KEY ([UserID])
REFERENCES [dbo].[User] ([UserID])
ON DELETE CASCADE ON UPDATE CASCADE );
我想通过1个当前用户显示8种不同类型的8种不同评级值。
答案 0 :(得分:0)
如果我理解正确,您希望根据另一个有辨别力的列将您的标签映射到不同的列:
using (var conn = new SqlConnection(connection))
using (var comm = new SqlCommand("SELECT * from dbo.Rating where UserID=@userId", conn))
{
comm.Parameters.AddWithValue("@userId", _userId);
conn.Open();
using (var reader = comm.ExecuteReader())
{
if (reader.HasRows && reader.Read())
{
FB.Text = reader["GenreID"].ToString() == "1"
? reader["RatingValue"].ToString();
: reader["SomeOtherColumn"].ToString();
}
}
}
如果要映射的一个或多个列位于Rating
以外的另一个表中,则需要加入该表 - 我们需要查看您的表结构以帮助您。
编辑,重新显示8种类型
我假设User和Genre表都有一列Name
- 加入这些表以查找评级。 GROUP and MAX
将消除同一用户在同一类型中具有多个评级的任何情况(如果您需要,请将MAX
切换为AVG
或MIN
。前8名将限制流派。所以像这样调整Sql:
SELECT TOP 8 u.Name AS UserName, g.Name as GenreName, MAX(r.RatingValue) AS TopRating
FROM dbo.Rating r
INNER JOIN dbo.[User] u
ON r.UserId = u.UserID
INNER JOIN dbo.[Genre] g
ON r.GenreID = g.GenreID
WHERE UserID=@userId
GROUP BY u.Name, g.Name
ORDER BY g.Name;
现在,对于用户界面,您将无法在单个标签中显示表格。最简单的方法是将读者的结果直接绑定到WebForm上的新GridView
控件
using (var reader = comm.ExecuteReader())
{
if (reader.HasRows)
{
gridView.DataSource = reader;
gridView.DataBind();
}
}
这将显示一个表格,其中3列与所选列匹配,最多可显示8行。