注册 登录
编程论坛 ASP.NET技术论坛

在ASP.NET中如何将事务放在两个方法中处理?

zhsht2663 发布于 2013-02-16 09:58, 643 次点击
请教高手:一个页面中有两个按钮,一个按钮用来读取数据并绑定到控件,开始事务,数据修改后,点击第二按钮后提交事务,保存修改。这两个按钮事件如何写?
以下是我写的方法,但不能实现,该如何修改?
    SqlConnection con = DB.dbcon();
    SqlTransaction tran=null;
    protected void Button1_Click(object sender, EventArgs e)
    {
        if (Page.IsValid)
        {
            yuejuantimu();
        }
    }
    public void yuejuantimu()
    {  
        string cmdsql = "select top 5 答案ID,t.科目,内容,考生答案,空后内容,参考答案,分值 from 答案评卷 d ";
        cmdsql += " WITH (updlock,readpast) inner join 试题库 t on t.试题ID=d.试题ID where t.科目= '";
        cmdsql += Request.QueryString["rjxk"].ToString()+ "' and t.题型='";
        cmdsql += DropDownList1.SelectedValue +"' and 小题得分 is null ORDER BY 答案ID ";
        SqlCommand cmd = new SqlCommand(cmdsql, con);
        SqlDataAdapter dpt = new SqlDataAdapter(cmd);
        try
        {
            con.Open();
            tran = con.BeginTransaction(IsolationLevel.RepeatableRead);
            cmd.Transaction = tran;                                    
            DataTable dt = new DataTable();
            dpt.Fill(dt);
            DataList1.DataSource = dt;
            DataList1.DataBind();
            Button1.Enabled = false;
        }
        catch
        {
            tran.Rollback();
            con.Close();
        }
    }

    protected void Button2_Click(object sender, EventArgs e)
    {
        string upstr = "";
        foreach (DataListItem list in DataList1.Items)
        {
            Label lbl = (Label)list.FindControl("lblID");
            TextBox txtda = (TextBox)list.FindControl("txtDaan");
            upstr += " update 答案评卷 set 小题得分=" + txtda.Text + " where 答案ID=" + lbl.Text ;
        }
        con.Open();
        SqlCommand cmd = new SqlCommand(upstr, con);
        tran = con.BeginTransaction(IsolationLevel.RepeatableRead);
        cmd.Transaction = tran;
        cmd.ExecuteNonQuery();   //执行到这里出现 :超时时间已到。在操作完成之前超时时间已过或服务器未响应。
        ();
        con.Close();
    }
请不吝敕教!
3 回复
#2
zhsht26632013-02-17 17:08
大家都不愿回答这样的问题还是我的礼貌不周?
#3
冰蟾子2013-02-25 01:20
不可以的..bs结构是无状态的

ps:不知道你这样做意义何在
#4
学荟宁静2013-02-25 10:09
你的事务已经开启过了,为什么在按钮时间里还要BeginTransaction呢。直接把已经开启的事务对象传进去就好了。因为你的数据没有提交过,所以它依然是open的!你可以调试一下。理清楚思路,个人认为你这样写事务是很不科学的!
1