0

これは私が書いたコードです

private void ViewUsers()
{
    con.Open();
    SqlCommand com = new SqlCommand();
    com.Connection = con;
    com.CommandText =
        "SELECT FirstName + ' ' + LastName AS Name FROM Clients WHERE UserID=" + Session["userid"];

    SqlDataReader data = com.ExecuteReader();

    while (data.Read())
    {
        lblName.Text = data["Name"].ToString();
    }
    data.Close();
    con.Close();
}

private void GetUserType()
{
    con.Open();
    SqlCommand com = new SqlCommand();
    com.Connection = con;
    com.CommandText =
        "SELECT UserTypeID FROM Users WHERE UserID=" + Session["userid"];

    SqlDataReader d2 = com.ExecuteReader();
    if (d2["UserTypeID"].ToString() != "4")
    {
        Response.Redirect("ContactUS.aspx");
    }
}

Session["userid"]から にあるViewUsers()から値を取得するにはどうすればよいGetUserTypeですか?

4

1 に答える 1

1

あなたのコメントに関して、Sessionはテーブルとは何の関係もありません。ユーザーがサイトSession["userid"] = "bob"にアクセスし、後で他の場所からアクセスするように設定Session["userid"]すると、常に値「bob」が提供されます。したがって、両方のメソッドでアクセスするコードはSession["userid"]、どちらの場合も値を提供する必要があります。

Session["userid"]はテーブルとは何の関係もありません。これは、名前と値のペアの単なるリストです。「userid」の上は、セッション値「bob」の名前です。

「読めない」と言うと、例外が発生しますか?または、ExecuteReaderは成功しますが、レコードを返しませんか? 試す前に電話していないことに気づきましたd2.Read()d2["UserTypeId"]

通常、行がない場合はデータを取得しようとしないため、.Readを呼び出す前にd2.HasRowsも確認します。

メソッドにブレークポイントを設定したときに、デバッガーを使用Session["userid"]して、ウォッチウィンドウに値として生成されるものを確認します。ハイライトし、右クリックして、時計を追加します。これは、それが問題であるかどうかを判断するのに役立ちます。

d2.HasRowsを追加して監視することもできます。また、ExecuteReaderを通過すると、その値を確認できます。結果が生成されない場合は、そのユーザーのテーブルに行がない可能性があります。

単一の行に単一の値のみが必要なように見えるため、ExecuteScalarの方が適している可能性があります: https ://stackoverflow.com/a/5794595/84206

于 2012-11-15T03:29:17.613 に答える