感谢

解决方案 »

  1.   

    C#有事务处理。
    楼主参照以下的代码吧。
    public static int updatePasswordFun(string LoginUser, string OldPassword, string NewPassword)
            {//启动事务处理,修改密码
                string dateOldPassword = MyMd5(OldPassword);
                string dateNewPassword = MyMd5(NewPassword);
                System.Data.SqlClient.SqlConnection conn = GetConn();
                conn.Open();
                SqlTransaction orderTrans = conn.BeginTransaction();
                SqlCommand cmd = new SqlCommand("updatePassword", conn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Transaction = orderTrans;
                int result = 1;
                try
                {
                    cmd.Parameters.Add("@LoginUser", System.Data.SqlDbType.VarChar, 20).Value = LoginUser;
                    cmd.Parameters.Add("@OldUserPassword", System.Data.SqlDbType.VarChar, 100).Value = dateOldPassword;
                    cmd.Parameters.Add("@NewUserPassword", System.Data.SqlDbType.VarChar, 100).Value = dateNewPassword;
                    cmd.Parameters.Add("@returnvalue", System.Data.SqlDbType.Int);
                    cmd.Parameters["@returnvalue"].Direction = ParameterDirection.ReturnValue;
                    cmd.ExecuteNonQuery();
                    orderTrans.Commit();
                    result = Convert.ToInt32(cmd.Parameters["@returnvalue"].Value);
                }
                catch
                {
                    orderTrans.Rollback();
                }
                finally
                {
                    conn.Close();
                    conn.Dispose();
                }
                return result;
            }
      

  2.   

    红色的代码标示为事务。如果你有多个SQL可以一起放在中间块进行处理
    public static int updatePasswordFun(string LoginUser, string OldPassword, string NewPassword)
            {//启动事务处理,修改密码
                string dateOldPassword = MyMd5(OldPassword);
                string dateNewPassword = MyMd5(NewPassword);
                System.Data.SqlClient.SqlConnection conn = GetConn();
                conn.Open();
                SqlTransaction orderTrans = conn.BeginTransaction();
                SqlCommand cmd = new SqlCommand("updatePassword", conn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Transaction = orderTrans;
                int result = 1;
                try
                {
                    cmd.Parameters.Add("@LoginUser", System.Data.SqlDbType.VarChar, 20).Value = LoginUser;
                    cmd.Parameters.Add("@OldUserPassword", System.Data.SqlDbType.VarChar, 100).Value = dateOldPassword;
                    cmd.Parameters.Add("@NewUserPassword", System.Data.SqlDbType.VarChar, 100).Value = dateNewPassword;
                    cmd.Parameters.Add("@returnvalue", System.Data.SqlDbType.Int);
                    cmd.Parameters["@returnvalue"].Direction = ParameterDirection.ReturnValue;
                    cmd.ExecuteNonQuery();
                    orderTrans.Commit();
                    result = Convert.ToInt32(cmd.Parameters["@returnvalue"].Value);
                }
                catch
                {
                    orderTrans.Rollback();
                }
                finally
                {
                    conn.Close();
                    conn.Dispose();
                }
                return result;
            }
      

  3.   

    用事务,把你的操作都写到一个事务里面,这样就能保证实现你要的功能。
    IF EXISTS(SELECT * FROM dbo.sysobjects WHERE NAME='pCreateBuildingMaterialsCompanyAndAdmin' AND XTYPE='p')
    DROP PROCEDURE dbo.pCreateBuildingMaterialsCompanyAndAdmin
    GO
    CREATE PROCEDURE dbo.pCreateBuildingMaterialsCompanyAndAdmin 
    @CoName NVARCHAR(100),
    @RegisterCapital NVARCHAR(50),
    AS
    BEGIN TRANSACTION
    INSERT INTO dbo.tBuildingMaterialsCompany(CoName,RegisterCapital) VALUES(@CoName,@RegisterCapital)
    INSERT INTO dbo.tBuildingMaterialsCompanyAdmin(CoId) VALUES(@@identity)
    IF(@@error=0)
    COMMIT TRANSACTION
    ELSE
    ROLLBACK TRANSACTION
    GO
    这样可以保证两个插入过程要不同时执行,要不都不执行。