Solved

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

Posted on 2009-05-19
6
1,308 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
Comment Utility
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
Comment Utility
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
Comment Utility
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
Better Security Awareness With Threat Intelligence

See how one of the leading financial services organizations uses Recorded Future as part of a holistic threat intelligence program to promote security awareness and proactively and efficiently identify threats.

 

Author Comment

by:srk1982
Comment Utility

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
Comment Utility
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
Comment Utility
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

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

More often than not, we developers are confronted with a need: a need to make some kind of magic happen via code. Whether it is for a client, for the boss, or for our own personal projects, the need must be satisfied. Most of the time, the Framework…
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
Sending a Secure fax is easy with eFax Corporate (http://www.enterprise.efax.com). First, Just open a new email message.  In the To field, type your recipient's fax number @efaxsend.com. You can even send a secure international fax — just include t…
This tutorial demonstrates a quick way of adding group price to multiple Magento products.

772 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

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now