2

我有一个数据库表,我现在在其中保存创建的用户和用户名,如果用户名存在于数据库中,我想从我的数据库中获取字符串值,然后我将显示错误消息“用户名存在或选择新的等”

这是我的存储过程

ALTER PROCEDURE [dbo].[p_SaveUpdate_AdminUserAccount]

 (    
 @Id_User int,    
 @nm_UserName varchar(50),      
 @nm_UserPassword varchar(50),      
 @nm_UserRole int      
 )    
AS    
BEGIN    
IF @Id_User=0    
 BEGIN 
 Declare @count int
    Select @count=COUNT(1) from ref_Admin_UserAccount where nm_UserName=@nm_UserName
    if(@count > 0)
    begin
        select -1 as a;
    end
    else
    BEGIN   
  SET NOCOUNT ON;  
  Insert into ref_Admin_UserAccount(nm_UserName,nm_UserPassword,nm_UserRole)  

values(@nm_UserName,@nm_UserPassword,@nm_UserRole) 
SELECT SCOPE_IDENTITY(); 
end

END    
ELSE    
 BEGIN    
  SET NOCOUNT ON;    
  UPDATE ref_Admin_UserAccount    
   SET    
   nm_UserName=@nm_UserName,    
   nm_UserPassword=@nm_UserPassword,    
   nm_UserRole=@nm_UserRole   
  WHERE Id_User=@Id_User;    
  SELECT @Id_User;    
End    
End 

这是我使用 3 层架构从表示层将值保存在数据库中的代码

 public int SaveAdminUserAccountInformation(AdminAccountProperties oAdminUser)
        {
            try
            {
                SqlParameter[] parm = new SqlParameter[4];

                parm[0] = new SqlParameter(PARM_ADMIN_USER_ID, SqlDbType.Int);
                parm[0].Value = oAdminUser.UserID;
                parm[1] = new SqlParameter(PARM_USER_NAME, SqlDbType.VarChar);
                parm[1].Value = oAdminUser.UserName;
                parm[2] = new SqlParameter(PARM_ADMIN_USER_PASSWORD, SqlDbType.VarChar);
                parm[2].Value = oAdminUser.Password;
                parm[3] = new SqlParameter(PARM_USER_ROLE, SqlDbType.Int);
                parm[3].Value = oAdminUser.UserRole;
                return Convert.ToInt32(SqlHelper.ExecuteScalar(this._ConnString, CommandType.StoredProcedure, SQL_ADMIN_USER_INSERT_UPDATE, parm));

            }
            catch (Exception ex)
            {
                throw ex;

            }
        }

请给我一些帮助。

4

3 回答 3

2

如果用户名存在,您的存储过程将返回 -1,因此我建议您在数据访问层中返回 int 而不是 string。这是您的代码中的一些修改

 public int SaveAdminUserAccountInformation(AdminAccountProperties oAdminUser)
        {
            try
            {
                SqlParameter[] parm = new SqlParameter[4];

                parm[0] = new SqlParameter(PARM_ADMIN_USER_ID, SqlDbType.Int);
                parm[0].Value = oAdminUser.UserID;
                parm[1] = new SqlParameter(PARM_USER_NAME, SqlDbType.VarChar);
                parm[1].Value = oAdminUser.UserName;
                parm[2] = new SqlParameter(PARM_ADMIN_USER_PASSWORD, SqlDbType.VarChar);
                parm[2].Value = oAdminUser.Password;
                parm[3] = new SqlParameter(PARM_USER_ROLE, SqlDbType.Int);
                parm[3].Value = oAdminUser.UserRole;
                int a =Convert.ToInt32(SqlHelper.ExecuteScalar(this._ConnString, CommandType.StoredProcedure, SQL_ADMIN_USER_INSERT_UPDATE, parm));
return a;

            }
            catch (Exception ex)
            {
                throw ex;

            }
        }

在此之后基于返回值做任何你想在表示层做的事情。

于 2013-06-13T08:26:34.803 回答
0

而是在存储过程中选择新行。使用存储过程的 OUT 参数。喜欢下面的代码:

                try
            {
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = "USP_IUD_FAC_SUBJECT";
                cmd.Parameters.AddWithValue("@EVENT", EVENTI);
                cmd.Parameters.AddWithValue("@FAC_SUB_CODE", FAC_SUB_CODE);
                cmd.Parameters.AddWithValue("@FAC_SUB_NAME", FAC_SUB_NAME);
                cmd.Parameters.AddWithValue("@TRAN_DATE", TRAN_DATE);
                cmd.Parameters.AddWithValue("@TRAN_USER_ID", TRAN_USER_ID);
                cmd.Parameters.AddWithValue("@APPROVED", APPROVED);
                cmd.Parameters.AddWithValue("@APPROVED_DATE", APPROVED_DATE);
                cmd.Parameters.AddWithValue("@APPROVED_USER_ID", APPROVED_USER_ID);

                SqlParameter outparameter = new SqlParameter("@MSG", SqlDbType.NVarChar, 200);
                outparameter.Direction = ParameterDirection.Output;
                cmd.Parameters.Add(outparameter);

                SqlParameter OutId = new SqlParameter("@RETURNOUTID", SqlDbType.Int);
                OutId.Direction = ParameterDirection.Output;
                cmd.Parameters.Add(OutId);

                cmd.ExecuteNonQuery();
                object msg = cmd.Parameters[outparameter.ParameterName].Value;
                ReturnId2 = Convert.ToString(cmd.Parameters[OutId.ParameterName].Value);

                return Convert.ToString(msg);

            }
            catch (Exception ex)
            {
                transaction.Rollback();
                throw new ArgumentException(ex.Message);
            }
            finally
            {
                transaction.Commit();
                DL_CCommon.Connection().Close();
            }

因此,使用 Out 参数创建存储过程。并且,在过程中将所需值设置为该 Out 参数。要在存储过程中使用 Out 参数,请点击链接: http: //www.codeproject.com/Articles/126898/Sql-Server-How-to-write-a-Stored-procedure-in-Sql

于 2013-06-12T12:15:49.220 回答
0

SQL

ALTER PROCEDURE [dbo].[p_SaveUpdate_AdminUserAccount]
  @Id_User int,    
 @nm_UserName varchar(50),      
 @nm_UserPassword varchar(50),      
 @nm_UserRole int,  
 @id int OUTPUT
AS

C#

SqlConnection db = DataConn.SqlConnection();
SqlCommand sqlComm = new SqlCommand(
           "p_SaveUpdate_AdminUserAccount @Id_User, @nm_UserName, @nm_UserPassword, @nm_UserRole, @id", db, transaction) { CommandType = CommandType.Text };
sqlComm.Parameters.Add(new SqlParameter("@Id_User", SqlDbType.Int)).Value;
sqlComm.Parameters.Add(new SqlParameter("@nm_UserName", SqlDbType.VarChar)).Value;
sqlComm.Parameters.Add(new SqlParameter("@nm_UserPassword", SqlDbType.VarChar)).Value;
sqlComm.Parameters.Add(new SqlParameter("@nm_UserRole", SqlDbType.VarChar)).Value;
sqlComm.Parameters.Add(new SqlParameter("@id", SqlDbType.Int) { Direction = ParameterDirection.Output });

sqlComm.Parameters.Add(param);
    sqlComm.ExecuteNonQuery();
于 2013-06-12T12:37:11.187 回答