我正在尝试验证我的SQL是否已正确执行,如果没有返回错误。
我的代码:
var db = Database.Open("database");
db.Execute("INSERT INTO Users(Username, Email, FirstName, SecondName) VALUES(?,?,?,?)", username, email, firstName, secondName);
另外,如何使用WebMatrix将列标记为唯一?这似乎是一个非常基本的功能,我真的很想念!我想这样做,以便电子邮件和用户名必须是唯一的,但我看不到有任何方法可以做到这一点?我基本上希望测试是否可以执行INSERT INTO(即数据库中没有相同的电子邮件/用户名)。
感谢您的帮助。
答案 0 :(得分:2)
关于你的第一个问题:
Execute
方法返回受影响记录的数量,并且您的代码片段正在执行插入操作,因此如果失败,它将返回一个不等于1的值。
var db = Database.Open("database");
if (db.Execute("INSERT INTO Users(Username, Email, FirstName, SecondName) VALUES(?,?,?,?)", username, email, firstName, secondName) < 1)
throw new Exception("Wasn't able to insert User record");
第二,我不确定,但应该在一个单独的问题中提出。
答案 1 :(得分:0)
我会创建一个存储过程,有条件地添加新用户并返回行计数(如果用户已经存在,则返回0):
create procedure dbo.AddUser
@username varchar(80)
, @email varchar(128)
, @firstname varchar(128)
, @secondname varchar(128)
as
insert into [Users] (Username,Email,FirstName,SecondName)
select @username, @email, @firstname, @secondname
where not exists(
select 1 from [Users] (nolock)
where Username=@username
and Email=@email
)
return @@rowcount
go
从C#调用:
var db = Database.Open("database");
if (db.Execute("dbo.AddUser @username=?, @email=?, @firstname=?, @secondname=?", username, email, firstName, secondName) < 1)
throw new Exception("Wasn't able to insert User record");