Solved

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

Posted on 2009-05-19
6
1,332 Views
Last Modified: 2013-12-17
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 :
-------------------------------------------------------------------------------
 
DELIMITER $$
 
DROP PROCEDURE IF EXISTS `demo`.`sp_LoginCheck`$$
 
create PROCEDURE `demo`.`sp_LoginCheck`( 
 IN UserName1 varchar(50),
 IN Password1 varchar(50),
 OUT DoesExist int)   
    BEGIN
 declare userCount INT default 0;
 SET DoesExist = 0; -- set to false initially, we'll assume for now it doesn't exist
 SELECT COUNT(Uid) INTO userCount
 FROM tbl_Users
 WHERE username = username1 and password=password1;
 IF userCount > 0 THEN
  SET DoesExist = 1;  -- more then one returned, return true
 END IF;
    END$$
 
DELIMITER ;
 
-------------------------------------------------------------------------------
 
C# :
-------------------------------------------------------------------------------
  public static int CheckLogin_Instructor(string UserName, string Password)
        {
            int doesExist = 0;
            try
            {
                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;
                myConn.Open();
                doesExist = (int)cmd.ExecuteScalar();
                myConn.Close();
            }
            catch (Exception ex)
            {
                ExceptionHandler.writeToLogFile(ex.StackTrace.ToString());
            }
            return doesExist;
        }
-------------------------------------------------------------------------------

Open in new window

0
Comment
Question by:srk1982
6 Comments
 
LVL 9

Assisted Solution

by:tculler
tculler earned 165 total points
ID: 24428238
Are you sure the that...
- The exception has a StackTrace at all?
- Neither parameter is null?
0
 
LVL 12

Assisted Solution

by:needo_jee
needo_jee earned 165 total points
ID: 24428244
hi
if you want to use cmd.ExecuteScalar()

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

OR

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
cmd.ExecuteNoneQuery()

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

-thanks


0
 

Author Comment

by:srk1982
ID: 24428275
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#.


 
0
3 Use Cases for Connected Systems

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, testing some more, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us.

 

Author Comment

by:srk1982
ID: 24428311

Hi needo_jee,

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

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

Thanks.
0
 
LVL 8

Accepted Solution

by:
tony_angelopoulos earned 170 total points
ID: 24428368
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)
0
 

Author Closing Comment

by:srk1982
ID: 31583335
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.
0

Featured Post

Master Your Team's Linux and Cloud Stack

Come see why top tech companies like Mailchimp and Media Temple use Linux Academy to build their employee training programs.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

We all know that functional code is the leg that any good program stands on when it comes right down to it, however, if your program lacks a good user interface your product may not have the appeal needed to keep your customers happy. This issue can…
Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.

832 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question