• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1484
  • Last Modified:

c# - Error -> Object reference not set to an instance of an object.

Hi experts,

     I am using C# and Mysql in my project. I have pasted my sp and C# code in the below box.

     I am returning a Int value from my SP. From c# i have to get that value, which determines whether the user has logged in or not.

     My sp works fine, when i executed it in my Mysql query browser and it also returns a perfect value.

     Problem is with my c# code to retrieve that value.
     I am getting this error :
     Object reference not set to an instance of an object.
     in the line "doesExist = (int)cmd.ExecuteScalar();"
     [Please refer the code.]

     Please help me on this. Its very URGENT....
SP :
DROP PROCEDURE IF EXISTS `demo`.`sp_LoginCheck`$$
create PROCEDURE `demo`.`sp_LoginCheck`( 
 IN UserName1 varchar(50),
 IN Password1 varchar(50),
 OUT DoesExist int)   
 declare userCount INT default 0;
 SET DoesExist = 0; -- set to false initially, we'll assume for now it doesn't exist
 FROM tbl_Users
 WHERE username = username1 and password=password1;
 IF userCount > 0 THEN
  SET DoesExist = 1;  -- more then one returned, return true
C# :
  public static int CheckLogin_Instructor(string UserName, string Password)
            int doesExist = 0;
                MySqlConnection myConn = new MySqlConnection(ConfigurationSettings.AppSettings["Con"]);
                MySqlCommand cmd = new MySqlCommand("sp_LoginCheck", myConn);
                cmd.CommandType = CommandType.StoredProcedure;
                MySqlParameter param = new MySqlParameter();
                param = cmd.Parameters.Add("@UserName1", MySqlDbType.VarChar, 50);
                param.Value = UserName;
                param = cmd.Parameters.Add("@Password1", MySqlDbType.VarChar, 50);
                param.Value = Password;
                param = cmd.Parameters.Add("@DoesExist", MySqlDbType.Int32);
                param.Direction = ParameterDirection.Output;
                doesExist = (int)cmd.ExecuteScalar();
            catch (Exception ex)
            return doesExist;

Open in new window

3 Solutions
Are you sure the that...
- The exception has a StackTrace at all?
- Neither parameter is null?
Munawar HussainPrincipal Software EngineerCommented:
if you want to use cmd.ExecuteScalar()

write this as a last line in your SP
SELECT DoesExist AS  DoesExist


however, if you want to use Output parameter then you can use execute scaler in the way you have used.
you need to get output parameter value after you execute query , not form scaler

after this line

 doesExist = (int)cmd.Parameters["@DoesExist"].value


srk1982Author Commented:
Hi tculler,

           There are 2 input parameters Username and Password.
           They are not null.
           The error is null reference exception, "Object reference not set to an instance of an object." which means that the return value is not coming from the SP [I guess]

Because the way i am executing the SP in mySql is
call sp_LoginCheck ('srk2','pwd2',@DoesExist);
SELECT @DoesExist

I think there is something to do with SP !!!
Correct me if i am wrong. I am a newbie for Mysql and C#.

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

srk1982Author Commented:

Hi needo_jee,

If i use your both idea i am getting the following error :

System.ArgumentException: Parameter 'string' not found in the collection.

I've had problems with this as well and noticed that when casting, all does not always go as planned.  cmd.ExecuteScalar() returns an object, and sometimes that object is NULL.  I've gotten around this before with using something like

object scalar = cmd.ExecuteScalar();
int retval = scalar.HasValue==false?0:Convert.ToInt32(scalar);

(if I remember my inline if statments correctly)
srk1982Author Commented:
Hi guys,

           I changed the way i am doing. I am getting the value in a dataset and accesing that in my code.
  Thanks for assisting me... I am sharing the points with all the 3 guys assisted me.

Thanks again.
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now