0

ユーザー名とパスワードを入力してログインすると、例外が発生します。

「パラメーター化されたクエリ '(@username nvarchar(4000),@password12 nvarchar(4000))SELECT me' は、指定されていないパラメーター '@username' を想定しています。」

コードを介して:

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;

   }
4

3 に答える 3

2

DB パラメータがどのように機能するかがおかしいため、set.Usernameisの場合に発生しnullます。したがって、 であるかどうかを確認set.Usernamenull、おそらくこの場合は例外を発生させます (nullユーザー名は間違いのように聞こえるため)。

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

より一般的なケースでは、を渡したい場合は、代わりに次のようなものをnull使用する必要があります。DBNull.Value

object username = set.Username;
if(username == null) username = DBNull.Value;
cmd.Parameters.AddWithValue("@username", username);
于 2012-06-15T11:51:32.133 に答える
0

対応するONなしで2つのINNER JOINが背中合わせになっています...それは解析エラーを引き起こしていますか???

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";
于 2012-06-15T11:54:42.637 に答える
0

set.Username最も可能性の高い説明は、 nullであると思います。

デバッガーを使用してステップスルーし、値を調べます。

于 2012-06-15T11:57:00.453 に答える