查看付款历史并在数据库中更新

时间:2017-11-17 12:44:40

标签: c# sql asp.net

使用ASP.NET创建网站时遇到问题。

我正在执行查看历史记录功能,用户在付款和参加活动后,可以在包含研讨会详细信息和付款详细信息的评论页面中撰写反馈。

当我从数据库中检索并从过去的事件中获得一些Review History时,它可以正常工作。这可以通过Review表手动添加评论和id评级来完成。

但是,当我想要检索用户已参加的研讨会时,但未审阅研讨会时,会出现错误消息:

system.ArgumentOutOfRangeException: Index was out of range. 

产生错误的行如下:

Review c = reviews[gvSeminar.SelectedIndex];

经过调试,我意识到价值:评论的值为Count:1。有趣的是,当我点击一个id有评论和评级时,值:评论也有一个Count值:1。因此,对于没有审核的ID,该程序显示超出范围的消息,因为此部分下没有评论或评级。

 Review c = reviews[gvSeminar.SelectedIndex];
 tbxRating.Text = c.Rating.ToString();
 tbxRemarks.Text = c.Remarks;

如果数据为null,我想让它工作,因为默认情况下没有评论或评级,因此用户可以将一些反馈写入查看历史记录。

查看历史记录(在ViewHistory.aspx的网格视图中选择过去的事件或新事件时):

...
{
    Panel1.Visible = true;
    Member m = (Member)Session["user"];
    List<ShoppingCart> shoppingcarts = ShoppingCartDBMgr.getAllShoppingCart(m.Email);
    gvSeminar.DataSource = shoppingcarts;
    gvSeminar.DataBind();
    List<Seminar> seminars = SeminarMgr.getAllSeminar();
    List<Schedule> schedules = ScheduleMgr.getAllSchedule();
    List<Review> reviews = ReviewDBMgr.getAllReviewById(m.Email);
    Seminar a = seminars[gvSeminar.PageSize * gvSeminar.PageIndex + gvSeminar.SelectedIndex];
    Schedule b = schedules[gvSeminar.SelectedIndex];
    if (reviews != null)
    {
        Review c = reviews[gvSeminar.SelectedIndex];
        tbxRating.Text = c.Rating.ToString();
        tbxRemarks.Text = c.Remarks;
    }
    else
    {
        Review r = new Review()
        {
            Rating = Convert.ToInt32(tbxRating.Text),
            Remarks = tbxRemarks.Text
        };
        int id = ReviewDBMgr.insertReview(r);
        lblOutput.Text = id + "Added!";
    }

    tbxId.Text = a.Id;
    tbxName.Text = a.Name;
    tbxPrice.Text = a.Price.ToString();
    tbxDate.Text = b.Date.ToShortDateString();
}

更新按钮以添加评论:

...
{
    Member m = (Member)Session["user"];
    List<ShoppingCart> shoppingcarts = ShoppingCartDBMgr.getAllShoppingCart(m.Email);
    gvSeminar.DataSource = shoppingcarts;
    gvSeminar.DataBind();
    List<Review> reviews = ReviewDBMgr.getAllReviewById(m.Email);

    if (reviews == null)
    {
        Review c = reviews[gvSeminar.SelectedIndex];
        tbxRating.Text = c.Rating.ToString();
        tbxRemarks.Text = c.Remarks;
        Review r = new Review()
        {
            Rating = Convert.ToInt32(tbxRating.Text),
            Remarks = tbxRemarks.Text
        };
        int id = ReviewDBMgr.insertReview(r);
        lblOutput.Text = id + "Added!";
    }
}

数据库管理员:

public static int insertReview(Review r)
{
    SqlConnection con = new SqlConnection(conStr);
    try
    {
        SqlCommand command = new SqlCommand();
        command.Connection = con;
        command.CommandText = "insert into Review (rev_rating, rev_remarks, sem_id, participant_email) values (@rev_rating, @rev_remarks, @sem_id, @participant_email)";
        command.Parameters.AddWithValue("@rev_rating", r.Rating);
        command.Parameters.AddWithValue("@rev_remarks", r.Remarks);
        command.Parameters.AddWithValue("@sem_id", r.Seminar.Id);
        command.Parameters.AddWithValue("@participant_email", r.Member.Email);
        con.Open();
        return command.ExecuteNonQuery();
    }
    finally
    {
        con.Close();
    }
}

1 个答案:

答案 0 :(得分:0)

这是你的插入命令

command.CommandText = "insert into Review (rev_rating, rev_remarks, sem_id, participant_email) values (@rev_rating, @rev_remarks, @sem_id, @participant_email)";

要在表格中 Udpate ,您已将其更改为

command.CommandText = "UPDATE Review SET rev_rating = @rev_rating, rev_remarks = @rev_remarks Where sem_id = @sem_id";