验证SQL是否已在WebMatrix/Razor中正确执行



我正在尝试验证我的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");

最新更新