2016-09-28 8 views
0

他のタイプにDBNULLからキャストすることはできません私はmvc5でWebアプリを作成しています私は例えばのための私のデータベース オブジェクトは、モデルmvc5

USERS

USER1)ユーザー名=イブラヒム・パスワード= 1ibrahim で複数のユーザーを持っていますuser2の)ユーザー名= adminパスワード=

4321私は、ページが正常にページ、 を歓迎するためにリダイレクトされますが、私は(管理者)エラーに、ユーザからログインしていたときに

を来ている)ユーザー1(イブラヒムからログインしていたときに

型「System.InvalidCastExceptionの」の例外が がmscorlib.dllで発生したが、ユーザーコード

追加情報で処理されませんでした:オブジェクトが他の タイプにはDBNullからキャストすることはできません。

ここ

このライン user = Convert.ToBoolean(cmd.ExecuteScalar());上の私のコードは、あなたのクエリが DBNull.Valueによって表される、 nullを返し

public class loginuser 
    { 
     SqlCommand cmd; 
     public string role { get; set; } 
     public string username { get; set; } 
     public string password { get; set; } 
     public bool getlogintype(string role, string username, string password) 
     { 

      string tru = ""; 
      string fals = ""; 
      bool user; 
      string strname = ""; 
      SqlConnection con = new SqlConnection("Data Source=erp.hti-india.com,1434;Initial Catalog=erp;Connect Timeout=3600;User Id=erprakesh;Password=14erprakesh14"); 
      List<object> login = new List<object>(); 
      if (role == "Admin" || role == "Super Admin" || role !=null) 
      { 
       cmd = new SqlCommand("select * from [admin] where userid='" + username + "' and pass ='" + password + "'", con); 
       con.Open(); 
       SqlDataAdapter da = new SqlDataAdapter(cmd); 
       DataTable dt = new DataTable(); 
       da.Fill(dt); 
       if (dt.Rows.Count > 0) 
       { 
        user = true; 
        //HttpContext.Current.Session["userid"] = username.ToString(); 
        //HttpContext.Current.Session["tru"] = tru.ToString(); 
        // want to redirect to welcome page if condition satisfied. 
       } 
       else 
       { 
        user = false; 
        //want to show the label error message(declare as string errormsg) 
       } 
       con.Close(); 
      } 
con.Open(); 
      user = Convert.ToBoolean(cmd.ExecuteScalar()); 
      con.Close(); 
      return user; 
     } 
    } 
+0

'select * from'から' cmd.ExecuteScalar() 'を使って??あなたは何をしようとしているのか分かりません。 – Ric

+0

私はちょうどユーザー名とパスワードを検証したいです –

+0

@Ricは私が のようなステートメントを選択する必要があります '選択userid、パスから管理者 ' –

答えて

2

です。ブール値に変換する前に確認する必要があります。

object result = cmd.ExecuteScalar(); 
if (result == DBNull.Value) 
{ 
    user = false; // or something like that 
} 
else 
{ 
    user = Convert.ToBoolean(result); 
} 

SQL文の脆弱性に注意してください。常にパラメータ化されたクエリを使用してください! select *にも注意してください。列を追加すると、問題が発生する可能性があります。必要なフィールドだけを選択してください。

+0

Ok sirありがとう –

+0

私はどのように結果を返すのですか?私はエラーに直面している –

+0

何が結果?何のエラー? –