这是我的控制器类
[HttpPost]
public ActionResult SignUp(SignupModel model)
{
User u = new User();
u.LoginId = model.LoginId;
u.Password = model.Password;
u.FullName = model.FullName;
new UsersHandler().AddUser(u);}
UserHandler类包含
public void AddUser(User user)
{
new DAC().Insert(user);
}
DAC类包含连接,UsersDAC包含查询
插入查询
internal void Insert(User user)
{
List<SqlParameter> temp = new List<SqlParameter>
{
new SqlParameter("@FullName", user.FullName),
new SqlParameter("@LoginId", user.LoginId),
new SqlParameter("@Password", user.Password)
};
SqlConnection con = DACHelper.GetConnection();
using (con)
{
con.Open();
SqlTransaction t = con.BeginTransaction();
try
{
user.Id = (int)DACHelper.ExecuteScalar(INSERT, temp, t);
DACHelper.Execute(INSERT, temp);
t.Commit();
}
catch (Exception)
{
t.Rollback();
}
}
}
DACHelper.Execute(INSERT,temp); 它执行但不在表格中插入任何内容。
存储过程
ALTER PROCEDURE [dbo].[Users_Insert]
@FullName varchar(50),
@LoginId varchar(50),
@Password varchar(50)
AS
Insert into [Users]
([FullName],[LoginId],[Password])
Values (@FullName,@LoginId,@Password)
Select @@IDENTITY from [Users]
答案 0 :(得分:0)
我的建议:
确保SqlCommand
对象知道它应该使用CommandType
CommandType.StoredProcedure
。
请勿使用SCOPE_IDENTITY
或@@IDENTITY
。获取标识字段的最安全方法如下(假设字段名称为ID
):
INSERT into [Users] ([FullName],[LoginID],[Password])
OUTPUT INSERTED.ID
VALUES (@FullName, @LoginID, @Password)
这将始终是正确的值。
答案 1 :(得分:0)
提交模式怎么样?它是否处于自动提交模式。如果不是尝试使用脚本手动执行提交。这应该在提交事务时显示消息。
答案 2 :(得分:0)
你没有用过sqlparamater.appwithvalue可能会导致这个问题..
internal void Insert(User user)
{
List<SqlParameter> temp = new List<SqlParameter>
{
new SqlParameter().AddWithvalue("@FullName", user.FullName),
new SqlParameter().AddWithvalue("@LoginId", user.LoginId),
new SqlParameter().AddWithvalue("@Password", user.Password)
};
SqlConnection con = DACHelper.GetConnection();
using (con)
{
con.Open();
SqlTransaction t = con.BeginTransaction();
try
{
user.Id = (int)DACHelper.ExecuteScalar(INSERT, temp, t);
DACHelper.Execute(INSERT, temp);
t.Commit();
}
catch (Exception)
{
t.Rollback();
}
}
}
答案 3 :(得分:0)
internal void Insert(User user)
{
List<SqlParameter> temp = new List<SqlParameter>
{
new SqlParameter("@LoginId", user.LoginId),
new SqlParameter("@Password", user.Password),
new SqlParameter("@FullName", user.FullName),
};
SqlConnection con = DACHelper.GetConnection();
using (con)
{
con.Open();
SqlTransaction t = con.BeginTransaction();
user.Id = (Int32)DACHelper.ExecuteScalar(INSERT, temp, t);
t.Commit();
}
}
这可以通过删除try / catch来实现。