sqlcon.Open();
SqlTransaction  Tran=sqlcon.BeginTransaction();

try
{
SqlCommand cmd=new SqlCommand(commitSql,sqlcon);
//这里我如果把她改成SqlCommand cmd=new SqlCommand();
                      cmd.CommandText=commitSql;
会报异常,说Connetion 的属性为初始化, 我怀疑是我得重新声明一个CONNECTION
结果还是同样得异常,知道我把它改成上面得才真确, 到底是什么原因???
//
cmd.Transaction=Tran;
cmd.ExecuteNonQuery();
Tran.Commit();

}
catch(Exception ex)

Tran.Rollback();
string error="9";
error+=ex.Message.ToString();
Session["error"]=error;
Response.Redirect("ErrorDisplay.aspx");
}
finally
{
sqlcon.Close();
}

解决方案 »

  1.   

    SqlCommand cmd=new SqlCommand();
    cmd.CommandText=commitSql;
    cmd.Transaction=Tran;这几个语句里虽然你给cmd的Transaction分了事务对象Tran,但是你的cmd依然要有一个Connection来设置.如下改一下:
    SqlCommand cmd=new SqlCommand();
    cmd.Connection = sqlcon;
    cmd.CommandText=commitSql;
    cmd.Transaction=Tran;或用sqlcon.CreateCommand来建立一个Command对象也可以.因为你只生成一个新的Sqlcommand对象,它自己没有一个连接对象和它关联.只有给它分配了才行,默认是没有弃置的.
      

  2.   

    SqlCommand cmd=new SqlCommand();
    cmd.CommandText=commitSql;
    cmd.Transaction=Tran;这几个语句里虽然你给cmd的Transaction分了事务对象Tran,但是你的cmd依然要有一个Connection来设置.如下改一下:
    SqlCommand cmd=new SqlCommand();
    cmd.Connection = sqlcon;
    cmd.CommandText=commitSql;
    cmd.Transaction=Tran;或用sqlcon.CreateCommand来建立一个Command对象也可以.因为你只生成一个新的Sqlcommand对象,它自己没有一个连接对象和它关联.只有给它分配了才行,默认是没有弃置的.