【问题标题】:Verify SQL has executed correctly in WebMatrix/Razor?验证 SQL 已在 WebMatrix/Razor 中正确执行?
【发布时间】:2012-03-11 02:39:30
【问题描述】:

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

我的代码:

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

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

感谢您的帮助。

【问题讨论】:

    标签: c# sql sql-server database webmatrix


    【解决方案1】:

    第一个问题:

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

    第二个,我不确定,但可能应该在单独的问题中提出。

    【讨论】:

      【解决方案2】:

      我将创建一个存储过程,它有条件地添加新用户并返回行数(如果用户已经存在,则为 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");
      

      【讨论】:

        猜你喜欢
        • 2016-03-20
        • 1970-01-01
        • 2012-03-17
        • 1970-01-01
        • 1970-01-01
        • 2023-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多