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

时间:2012-03-11 02:39:30

标签: c# sql sql-server database webmatrix

我正在尝试验证我的SQL是否已正确执行,如果没有返回错误。

我的代码:

 var db = Database.Open("database");
            db.Execute("INSERT INTO Users(Username, Email, FirstName, SecondName) VALUES(?,?,?,?)", username, email, firstName, secondName);

另外,如何使用WebMatrix将列标记为唯一?这似乎是一个非常基本的功能,我真的很想念!我想这样做,以便电子邮件和用户名必须是唯一的,但我看不到有任何方法可以做到这一点?我基本上希望测试是否可以执行INSERT INTO(即数据库中没有相同的电子邮件/用户名)。

感谢您的帮助。

2 个答案:

答案 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");