Question

I have a database table in which i am saving created users along with username now what i want to get string value from my database if username exists in database and then i will show error message "UserName Exists or Choose new one etc etc"

here is my stored procedure

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 

and here is my code to save values in database from presentation layer using 3 tier archiecture

 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;

            }
        }

please give me some help.

Was it helpful?

Solution

Your stored procedure returns -1 if username exists so i suggest you to return int rather than string in your Data Access Layer. here is some modifications in your code

 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;

            }
        }

after this on basis of return value do what ever you want to do in presentation layer.

OTHER TIPS

Instead Selecting the New row in Stored Procedure. Use an OUT Parameter of the Stored Procedure. Like the Code Below :

                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();
            }

So, Create the Stored Procedure with an Out Parameter. And, Set the Required value into that Out parameter in Procedure. For using Out Parameter in Stored Procedure Follow the link : http://www.codeproject.com/Articles/126898/Sql-Server-How-to-write-a-Stored-procedure-in-Sql

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();
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top