-3

セッションの値を比較する方法がわかりません。

データベースのクエリ:

 conexion.Open();
        SqlCommand comando = new SqlCommand("SELECT id_cliente,alias,area FROM tbleuser WHERE usuario=@username AND pass=@thepassword",conexion);
        comando.Parameters.AddWithValue("@username",user.Text);
        comando.Parameters.AddWithValue("@thepassword", pas.Text);
        SqlDataReader r = comando.ExecuteReader();


        while(r.Read())
        {

            Session["UsuarioId"] = r["id_cliente"].ToString();
            Session["AreaUsuario"] = r["area"].ToString();
            Session["AliasUsuario"] = r["alias"].ToString();
           checkUser();
        } 

checkUser メソッドは、ユーザーの種類を Alias フィールドと比較する必要があります。使用したオプションは次のとおりです。

1

if(Session["AliasUsuario"].ToString() == "Doctors")
{
//not working
}

2

if(Convert.ToString(Session["AliasUsuario"]) == "Doctors")
{
//not working
}

3

if(Convert.ToString(Session["AliasUsuario"]).Equals("Doctors"))
{
//not working
}

4

if(Session["AliasUsuario"].ToString().Equals("Doctors"))
{
//not working
}

助言がありますか?続行する前に、ログインしているユーザーの種類を知る必要があります。ありがとう

4

3 に答える 3

2

MSDNから:

戻り値の
型: System.Boolean行がさらにある場合は
true 。それ以外の場合はfalse

コマンドが複数の行を返す場合、予期しない値が設定される可能性があります。それは知っておくべきことです。

あなたのコメントから、設定される前にセッション変数を読み込もうとしているようです。

Doctorsまた、値が空白文字 ( \r\n\r\n、 ) でデータベースに滑り込んでいる可能性が非常に高く、 spaceSQL Server Management Studio などのデータベース ツールでは表示されないことがよくあります。そうであるかどうかを確認するには、次のようなものを使用できます。

if(Session["AliasUsuario"] != null)
{
    if (Session["AliasUsuario"].ToString().ToLower().Contains("doctors"))
    {
        // that's the case
    }
}

また、ループSession["AliasUsuario"]直後の値を確認してみてください。while単純なブレークポイントでうまくいく可能性があります。

于 2013-03-10T21:11:24.127 に答える
0

SqlDataReader r = comando.ExecuteReader();行を返さない場合は、セッションに何も設定していないため
、次のようなものを使用して何も読み取ることができません。

if (r.HasRows)
{
    while(r.Read())
    {
        Session["UsuarioId"] = r["id_cliente"].ToString();
        Session["AreaUsuario"] = r["area"].ToString();
        Session["AliasUsuario"] = r["alias"].ToString();
        checkUser();
    }   
}
else
{
        Session["UsuarioId"] = "none";
        Session["AreaUsuario"] = "none";
        Session["AliasUsuario"] = "none";
}
于 2013-03-10T20:26:47.007 に答える
0

単純な間違いを見落としているように見えます。文字列の比較では大文字と小文字が区別されます(特に指定しない限り)。

Doctorまた、単数形と複数形( vs Doctors)を比較しているのでしょうか。

第3に、構成ファイルのキーでも大文字と小文字が区別されます。したがってAliasUsuario、と同じではありませんAliasusuario

于 2013-03-10T20:26:54.883 に答える