以下代码如何改?在那里改?
.............
else
{
dr.Close();
OleDbTransaction trans=cn.BeginTransaction();
cmd.Transaction=trans;
try
{
cmd=new OleDbCommand("insert into userinfo_1(username,nichen,pwd) values('"+tbusername.Text+"','"+Server.HtmlEncode(tbnichen.Text)+"','"+cla.DesEncrypt(tbpwd.Text,"oneweb")+"')",cn);
cmd.ExecuteNonQuery();
cmd=new OleDbCommand("insert into userinfo_2(email)values('"+tbemail.Text+"')",cn);
cmd.ExecuteNonQuery();
cmd=new OleDbCommand("insert into dbookinfo(title,myword) values('"+Server.HtmlEncode(tbtitle.Text)+"','"+Server.HtmlEncode(tbxuyan.Text)+"')",cn);
cmd.ExecuteNonQuery();
cmd=new OleDbCommand("insert into findpwd(question,answer) values('"+Server.HtmlEncode(tbquestion.Text)+"','"+Server.HtmlEncode(tbanswer.Text)+"')",cn);
cmd.ExecuteNonQuery();
trans.Commit();
Response.Redirect("user.aspx?user="+Server.HtmlEncode(tbnichen.Text));
}
catch
{
trans.Rollback();
Response.Write("<script>alert('注册不成功,请稍后再试!')</script>");
} }
..........当分配给命令的连接处于挂起的本地事务中时,命令必须具有事务对象才能执行。该命令的 Transaction 属性尚未初始化。 说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.InvalidOperationException: 当分配给命令的连接处于挂起的本地事务中时,命令必须具有事务对象才能执行。该命令的 Transaction 属性尚未初始化。

解决方案 »

  1.   

    第一条sql语句执行完毕后.将下一条sql语句直接附给cmd.CommandText就行了.不需要再重新生成一个Command对象.
    例:
    cmd=new OleDbCommand("insert into userinfo_1(username,nichen,pwd) values('"+tbusername.Text+"','"+Server.HtmlEncode(tbnichen.Text)+"','"+cla.DesEncrypt(tbpwd.Text,"oneweb")+"')",cn);
    cmd.ExecuteNonQuery();
    cmd.CommandText = ("insert into userinfo_2(email)values('"+tbemail.Text+"')" ;
    cmd.ExecuteNonQuery();
    trans.Commit();
      

  2.   

    else
    {
    dr.Close();
    OleDbTransaction trans=cn.BeginTransaction();
    OleDbCommand cmd=new OleDbCommand();
    cn.Open();
    cmd.Connection =cn;
    cmd.Transaction=trans;
    try
    {
    cmd.CommandText = "insert into userinfo_1(username,nichen,pwd) values('"+tbusername.Text+"','"+Server.HtmlEncode(tbnichen.Text)+"','"+cla.DesEncrypt(tbpwd.Text,"oneweb")+"')";
    cmd.ExecuteNonQuery(); cmd.CommandText = "insert into findpwd(question,answer) values('"+Server.HtmlEncode(tbquestion.Text)+"','"+Server.HtmlEncode(tbanswer.Text)+"')"
    cmd.ExecuteNonQuery();                        //.......
    trans.Commit();
    Response.Redirect("user.aspx?user="+Server.HtmlEncode(tbnichen.Text));
    }
    catch
    {
    trans.Rollback();
    Response.Write("<script>alert('注册不成功,请稍后再试!')</script>");
    } }
    ..........