Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

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

Posted on 2009-05-19
6
Medium Priority
?
1,398 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
6 Comments
 
LVL 9

Assisted Solution

by:tculler
tculler earned 495 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:Munawar Hussain
Munawar Hussain earned 495 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
Prepare for your VMware VCP6-DCV exam.

Josh Coen and Jason Langer have prepared the latest edition of VCP study guide. Both authors have been working in the IT field for more than a decade, and both hold VMware certifications. This 163-page guide covers all 10 of the exam blueprint sections.

 

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 510 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

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

This document covers how to connect to SQL Server and browse its contents.  It is meant for those new to Visual Studio and/or working with Microsoft SQL Server.  It is not a guide to building SQL Server database connections in your code.  This is mo…
Entity Framework is a powerful tool to help you interact with the DataBase but still doesn't help much when we have a Stored Procedure that returns more than one resultset. The solution takes some of out-of-the-box thinking; read on!
This tutorial will teach you the special effect of super speed similar to the fictional character Wally West aka "The Flash" After Shake : http://www.videocopilot.net/presets/after_shake/ All lightning effects with instructions : http://www.mediaf…
In this video, Percona Solutions Engineer Barrett Chambers discusses some of the basic syntax differences between MySQL and MongoDB. To learn more check out our webinar on MongoDB administration for MySQL DBA: https://www.percona.com/resources/we…

618 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