我正在尝试验证我的SQL是否正确执行,如果没有返回错误。
我的代码:
var db = Database.Open("database");
db.Execute("INSERT INTO Users(Username, Email, FirstName, SecondName) VALUES(?,?,?,?)", username, email, firstName, secondName);
此外,如何使用WebMatrix将列标记为唯一?这似乎是我真正缺少的一个非常基本的功能!我想让电子邮件和用户名必须是唯一的,但我看不出有什么方法可以做到这一点?然后,我基本上希望测试INSERT INTO是否可以执行(即,数据库中没有相同的电子邮件/用户名)。
谢谢你的帮助。
对于您的第一个问题:
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");
第二个问题,我不确定,但可能应该在另一个问题中问。
我会创建一个存储过程,该过程有条件地添加新用户并返回行计数(如果用户已经存在,则为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");