Проверить, правильно ли выполнен SQL в WebMatrix / Razor? - PullRequest
2 голосов
/ 11 марта 2012

Я пытаюсь проверить, правильно ли был выполнен мой SQL, а если нет, вернуть ошибку.

Мой код:

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

Кроме того, как вы можете пометить столбец как уникальный с помощью WebMatrix? Кажется, это довольно базовая функциональность, которую мне действительно не хватает! Я хочу сделать так, чтобы электронные письма и имена пользователей были уникальными, но я не вижу способа сделать это? По сути, я надеюсь проверить, можно ли выполнить INSERT INTO (т. Е. В базе данных уже нет адреса электронной почты / имени пользователя).

Спасибо за помощь.

Ответы [ 2 ]

2 голосов
/ 11 марта 2012

По первому вопросу:

Метод 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 голосов
/ 11 марта 2012

Я бы создал хранимую процедуру, которая условно добавляет нового пользователя и возвращает количество строк (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");
...