回发时会话错误

时间:2013-01-18 09:48:08

标签: c# asp.net .net

if (!IsPostBack)
{
        try
        {
            Label1.Text = Session["user.transaction.id"].ToString(); //Error Line
        }
        catch (Exception a8)
        {
            Label1.Text = a8.Message;
        }
 }

我用来将信息存储到Session

中的代码

试         {

        _conn = new OdbcConnection(DatabaseManager.getConnectionString());
        if (_conn.State == ConnectionState.Closed)
            _conn.Open();
        OdbcCommand cmd = _conn.CreateCommand();
        cmd.CommandText = "{call vam_gen_new_card3(?,?,?,?,?,?,?,?,?,?,?)}";
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add("@personal_card", OdbcType.Char, 1).Value = 'Y';
        cmd.Parameters.Add("@holder_surname", OdbcType.VarChar, 50).Value = tbSurname.Text.ToString();
        cmd.Parameters.Add("@holder_name", OdbcType.VarChar, 100).Value = tbName.Text.ToString();
        cmd.Parameters.Add("@holder_cname", OdbcType.Char, 10).Value = tbCname.Text.ToString();
        cmd.Parameters.Add("@date_of_birth", OdbcType.VarChar, 11).Value = tbDOB.Text.ToString();
        cmd.Parameters.Add("@travel_document_no", OdbcType.VarChar, 20).Value = tbTravelDocNo.Text.ToString();
        cmd.Parameters.Add("@nationality", OdbcType.VarChar, 40).Value = tbNationality.Text.ToString();
        cmd.Parameters.Add("@email", OdbcType.VarChar, 50).Value = tbEmail.Text.ToString();
        cmd.Parameters.Add("@telephone", OdbcType.VarChar, 20).Value = tbTelephone.Text.ToString();
        cmd.Parameters.Add("@mobilephone", OdbcType.VarChar, 20).Value = tbMobile.Text.ToString();
        cmd.Parameters.Add("@card_remark", OdbcType.VarChar, 255).Value = card_remark;
        OdbcDataReader rs = cmd.ExecuteReader();

        while (rs.Read())
        {
            Session["user.transaction.id"] = "SVC0" + rs["card_no"].ToString();   //get the transaction no.
            Session["user.total_amount"] = Convert.ToDecimal(tbAmount.Text);
        }

我最初在Session["user.transaction.id]中创建了交易ID。但是当我将信息发布到paymentgateway并发回时。我无法取回Session["user.transaction.id"]并得到错误。我想知道如何解决这个问题。

3 个答案:

答案 0 :(得分:1)

创建会话变量的正确方法是:

Session["VarName"] = value;

从会话中读取项目:

Label1.Text = Session["VarName"].ToString();

或者您可以将Add方法用作:

Session.Add("VarName", value);

无论哪种方式都可行。

接下来从会话状态中删除项目:

Session.Remove("VarName");

要清除会话状态中的所有项目,请使用:

Session.Clear();

答案 1 :(得分:1)

NullReferenceException比他们应该更常见。

你什么都不能打电话给ToString()。您应该检查,例如:

if (Session["user.transaction.id"] != null) {
    Session["user.transaction.id"].ToString();
}

这是你应该习惯记住的东西,并学会不要假设任何东西都会成为某种东西。只需看看Label.Texta8.Message:在这些情况下,Labela8是事情的更加明确和“安全”,但每次您访问成员时在引用类型中,您应该知道您的变量具有对实例的引用。因此,这些例外很容易追查。

如果您在将用户发送到某处然后让他们返回时遇到此问题,则很可能用户离开的时间比为会话超时分配的时间长,因此开始新会话他们的回归。

答案 2 :(得分:0)

您的会话为空。你必须先在会话中检查空值,然后使用会话变量中存在的值。

试试这个

if (!IsPostBack)
                {
                    try
                    {
                        if (Session["user.transaction.id"] != null && !string.IsNullOrEmpty(Session["user.transaction.id"].ToString()))
                        {
                            Label1.Text = Session["user.transaction.id"].ToString(); //Error Line
                        }

                    }
                    catch (Exception a8)
                    {
                        Label1.Text = a8.Message;
                    }
                }
相关问题