用事务,把你的操作都写到一个事务里面,这样就能保证实现你要的功能。 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 这样可以保证两个插入过程要不同时执行,要不都不执行。
楼主参照以下的代码吧。
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;
}
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;
}
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
这样可以保证两个插入过程要不同时执行,要不都不执行。