2017-03-17 26 views
1

我有一個按鈕來添加用戶,如果我點擊該按鈕,彈出顯示添加用戶,但保存時,我得到一個異常,用戶ID是沒有提供給存儲過程。存儲過程在創建新用戶期間返回空值到參數

表中登錄用戶標識爲int not null

我保留了一個調試器,並試圖@userid爲空。並且程序期待參數@userid;我哪裏錯了?

alter Procedure logins 
    @UserId varchar(50), 
    @UserName Varchar(100), 
    @FirstName Varchar(100), 
    @LastName Varchar(100), 
    @Email Varchar(200), 
    @Password Varchar(100), 
    @AllNames Varchar(max) 
As 
Begin 
    if @UserId is Null 
     Insert into logins (UserName, FirstName, LastName, Email, Role, DateCreated, DateModified, Password, Allnames) 
     Values (@UserName, @FirstName, @LastName, @Email, 'Admin', GetDate(), GetDate(), @Password, @allnames) 
    Else 
     Update logins 
     Set UserName = @UserName, 
      FirstName = @FirstName, 
      LastName = @LastName, 
      AssignedGroups = @Allnames 
     Where 
      UserId = @UserId 
End 

任何存儲過程的問題,有什麼建議改變我的存儲過程

想法?

意見建議??

+0

您沒有顯示調用過程的代碼。 – Dai

+3

另請參見:1. **從不將密碼存儲爲數據庫中的明文!** - 存儲鹽漬散列。 2.使用'MERGE'(「upsert」)而不是'IF ... INSERT ELSE UPDATE',因爲它是一個單獨的原子語句。 3.你的'UPDATE'語句不會更新'DateModified'值。 4.如果你正在存儲人類可讀的文本,你應該使用'nvarchar'而不是'varchar'來支持Unicode(http://dba.stackexchange.com/questions/139551/how-do-i-set-a- sql-server-unicode -nvarchar-string-to-an-emoji-or-supplementary) - 例如,你不能在'varchar'列中存儲表情符號。 – Dai

+0

錯誤與調用SP而不是SP的c#代碼有關。顯示該代碼。 – CodingYoshi

回答

0

用戶ID int = null工作正常,我可以插入。

alter Procedure logins 
    @UserId int = null 
    @UserName Var char(100), 
    @FirstName Var char(100), 
    @LastName Var char(100), 
    @Email Var char(200), 
    @Password Var char(100), 
    @AllNames Var char(max) 
As 
Begin 
    if @User Id is Null 
     Insert into logins (UserName, FirstName, LastName, Email, Role, Date Created, Date Modified, Password, All names) 
     Values (@User Name, @FirstName, @LastName, @Email, 'Admin', Get Date(), Get Date(), @Password, @allnames) 
    Else 
     Update logins 
     Set User Name = @UserName, 
      First Name = @FirstName, 
      Last Name = @LastName, 
      All Names = @Allnames 
     Where 
      UserId = @UserId 
End