0
votes

When i login by giving username and password, I get an exception:

"The parameterized query '(@username nvarchar(4000),@password12 nvarchar(4000))SELECT me' expects the parameter '@username', which was not supplied."

through code:

public DataSet showoption1(seter set)
{         
   string sql = "SELECT   menue.menuename,roleid, [right].rightname,        
     role.rolename, employee.employeename, employee.password FROM  [right] INNER JOIN 
     permission ON [right].rightid = permission.rightid INNER JOIN  role ON  
     permission.roleid   = role.roleid INNER JOIN emp_men INNER JOIN employee ON 
     emp_men.employeeid = employee.employeeid ON role.roleid = employee.roleid 
     INNER JOIN menue ON emp_men.menueid = menue.menueid 
     where employee.employeenamee=@username 
     AND employee.password=@password12";

   SqlCommand cmd = new SqlCommand(sql, con);
   cmd.Parameters.AddWithValue("@username",set.Username);
   cmd.Parameters.AddWithValue("@password12",set.Password);
   SqlDataAdapter adptr = new SqlDataAdapter(cmd);

   DataSet ds = new DataSet();
   adptr.Fill(ds);
   int id=  Convert.ToInt32( ds.Tables[2].Rows[0]["rooleid"]);

   st.Username=  Convert.ToString(ds.Tables[2].Rows[id]["roolename"]);

   adptr.Dispose();

   return ds;

   }
3
If set.Username is null, the parameter is not created. Have you checked the value? - stuartd

3 Answers

2
votes

Due to an oddity of how DB parameters work, that will happen if set.Username is null. So: check whether set.Username is null, and presumably raise an exception in this case (since a null username sounds like a mistake).

if(string.IsNullOrWhiteSpace(set.Username))
    throw new InvalidOperationException("No username was provided");

In the more general case, if you do want to pass null, you must use DBNull.Value instead, i.e. something like:

object username = set.Username;
if(username == null) username = DBNull.Value;
cmd.Parameters.AddWithValue("@username", username);
0
votes

You have two INNER JOINs back to back without the corresponding ON... is that causing a parsing error???

SELECT   
      menue.menuename,
      roleid, 
      [right].rightname,
      role.rolename, 
      employee.employeename, 
      employee.password 
   FROM  
      [right] 
         INNER JOIN permission 
            ON [right].rightid = permission.rightid 
            INNER JOIN role 
               ON  permission.roleid   = role.roleid 
               INNER JOIN employee 
                  ON role.roleid = employee.roleid 
                  INNER JOIN emp_men 
                     ON emp_men.employeeid = employee.employeeid 
                     INNER JOIN menue 
                        ON emp_men.menueid = menue.menueid 
   where 
          employee.employeenamee = @username 
      AND employee.password=@password12";
0
votes

I think the most likely explanation is that set.Username is null.

Step through with a debugger and inspect the values.