Solved

c# - Error -> Parameter 'string' not found in the collection.

Posted on 2009-05-18
11
1,400 Views
Last Modified: 2013-12-17
Hi Experts,

           I have written a SP in MYSQL to check the login information and returning a value to the c# code.I am getting the following error :

Aurgument exception was unhandled.
Parameter 'string' not found in the collection.

C# :
 
 private void btnOK_Click(object sender, EventArgs e)
        {
            MySqlConnection myConn = new MySqlConnection(ConfigurationSettings.AppSettings["Con"].ToString());
            MySqlCommand myCommand = new MySqlCommand("sp_LoginCheck", myConn);
            myCommand.CommandType = CommandType.StoredProcedure;
            MySqlParameter myParm = new MySqlParameter();
            myParm = myCommand.Parameters.Add("@UserName", MySqlDbType.VarChar, 50);
            myParm.Value = "srk1";
            myParm = myCommand.Parameters.Add("@Password", MySqlDbType.VarChar, 50);
            myParm.Value = "pwd1";
            myParm = myCommand.Parameters.Add("@DoesExist", MySqlDbType.Bit);
            myParm.Direction = ParameterDirection.Output;
            myConn.Open();
            myCommand.ExecuteNonQuery();
            bool doesExist = (bool)myCommand.Parameters["@DoesExist"].Value;
            if (!doesExist)
            {
                MessageBox.Show("UserName/Password invalid.");
            }
            else
            {
                MessageBox.Show("Logged in successfully.");
            }
            myConn.Close();
        }
________________________________________________
Mysql SP :
 
DELIMITER $$
 
DROP PROCEDURE IF EXISTS `demo`.`sp_LoginCheck`$$
 
CREATE PROCEDURE `demo`.`sp_LoginCheck`(
   
 IN UserName1 varchar(50),
 IN Password1 varchar(50),
 OUT DoesExist bit)   
    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 ;
________________________________________________

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
  • 5
  • 4
  • 2
11 Comments
 
LVL 14

Expert Comment

by:jjardine
ID: 24417905
What line is this casuing an error on?   What happens if you close the connection after running the ExecuteNonQuery and then check the value of the parameter?
0
 
LVL 18

Expert Comment

by:philipjonathan
ID: 24417908
Try if changing the following lines help (use ? instead of @):

myParm = myCommand.Parameters.Add("?UserName", MySqlDbType.VarChar, 50);
myParm = myCommand.Parameters.Add("?Password", MySqlDbType.VarChar, 50);
myParm = myCommand.Parameters.Add("?DoesExist", MySqlDbType.Bit);
bool doesExist = (bool)myCommand.Parameters["?DoesExist"].Value;
0
 

Author Comment

by:srk1982
ID: 24417946
Hi jjardine,

Error is coming in the following line...

myCommand.ExecuteNonQuery();
0
Webinar: Aligning, Automating, Winning

Join Dan Russo, Senior Manager of Operations Intelligence, for an in-depth discussion on how Dealertrack, leading provider of integrated digital solutions for the automotive industry, transformed their DevOps processes to increase collaboration and move with greater velocity.

 

Author Comment

by:srk1982
ID: 24417951
Hi philipjonathan,

      I tried your idea, but still the same erorr.


Error is coming in the following line...

myCommand.ExecuteNonQuery();
0
 
LVL 18

Expert Comment

by:philipjonathan
ID: 24418014
Try to use the same name for the parameter (UserName1 and Password1)
myParm = myCommand.Parameters.Add("?UserName1", MySqlDbType.VarChar, 50);
myParm = myCommand.Parameters.Add("?Password1", MySqlDbType.VarChar, 50);
0
 

Author Comment

by:srk1982
ID: 24418034
Hi philipjonathan,

 still same problem !!! :(
0
 
LVL 14

Expert Comment

by:jjardine
ID: 24418049
Your parameters in the code have the @ symbol in front of them, but in the Stored Proc they do not.   Could that be causing an issue?   I don't work with MySQL but within SQL the parameter names are the same so in the sproc they would be @userName   and in the parameter for the command object it would be @userName.
0
 
LVL 18

Accepted Solution

by:
philipjonathan earned 500 total points
ID: 24418108
I search some example on the net, and saw that some don't have '?' in front of argument names.
http://www.aspcode.net/MySQL-DAL-stored-procedures-support-howto-part-14.aspx
http://forums.asp.net/p/988462/1309349.aspx#1309349

I'm not suppose to do trial-and-error with you, but one last try, change the following lines:
myParm = myCommand.Parameters.Add("UserName1", MySqlDbType.VarChar, 50);
myParm = myCommand.Parameters.Add("Password1", MySqlDbType.VarChar, 50);
myParm = myCommand.Parameters.Add("DoesExist", MySqlDbType.Bit);
bool doesExist = (bool)myCommand.Parameters["DoesExist"].Value;

My apologies if this doesn't work
0
 

Author Comment

by:srk1982
ID: 24418136
No opologies philipjonathan.....
Its working great.........
0
 

Author Closing Comment

by:srk1982
ID: 31582833
Thanks.
0
 
LVL 18

Expert Comment

by:philipjonathan
ID: 24418284
Phew! :)
Now I know, I always thought MySQL needs the '?', I was wrong.
0

Featured Post

How our DevOps Teams Maximize Uptime

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

Question has a verified solution.

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

Introduction Hi all and welcome to my first article on Experts Exchange. A while ago, someone asked me if i could do some tutorials on object oriented programming. I decided to do them on C#. Now you may ask me, why's that? Well, one of the re…
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…
Email security requires an ever evolving service that stays up to date with counter-evolving threats. The Email Laundry perform Research and Development to ensure their email security service evolves faster than cyber criminals. We apply our Threat…

749 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