0

空のグリッドビューを作成し、sqldatasource を作成しました。select ステートメントは次のとおりです。

SELECT S.[ID], S.[Survey_Name], S.[Start_Date], S.[End_Date], C.[Category_Name], S.[Username], S.[Audience] FROM [Survey] S
Inner Join
Category C On S.Category_ID = C.ID Where Username = @Username

その後、パラメーターのソースを「セッション」として選択し、そのセッション フィールドを「ユーザー名」として選択すると、このセッションはログイン時に入力されます。テストしてユーザー名を入力すると機能しますが、プログラムを実行すると、グリッドビューは常に空白になります。

編集: 私の aspx.page コード。

<asp:SqlDataSource 
    ID="SqlDataSource1"
    Runat="server" 
    SelectCommand="SELECT S.[ID], S.[Survey_Name], S.[Start_Date], 
                 S.[End_Date], C.[Category_Name], S.[Username], S.[Audience] 
                 FROM [Survey] S Inner Join Category C 
                      On S.Category_ID = C.ID Where Username = @Username"
    SelectCommandType="Text"
    ConnectionString="<%$ ConnectionStrings:SurveySystemConnectionString %>">
    <SelectParameters>
       <asp:SessionParameter Name="Username" DbType="String" 
            DefaultValue=""  SessionField="username"/>

    </SelectParameters>
</asp:SqlDataSource>

編集:私のログインボタン

protected void LoginButton_Click(object sender, EventArgs e)
        {
            lblerror.Visible = false;

            SqlConnection conn = DatabaseConnection.GetSurveySystemConnection();             
            string queryString = "SELECT * FROM [Users] WHERE Username=@username AND Password= @password";
            SqlCommand command = new SqlCommand(queryString, conn);
            command.Parameters.AddWithValue("@username", UserNameTextBox.Text);
            command.Parameters.AddWithValue("@password", PasswordTextBox.Text);

            SqlDataReader reader = null;
            reader = command.ExecuteReader();

            if (reader.Read())
            {
                Session["Username"] = UserNameTextBox.Text;
                Session["Name"] = (string)reader["name"];
                Session["UserType"] = (string)reader["UserType"];
                Response.Redirect("Home.aspx");
            }
Connection.close();
}
4

2 に答える 2

0
protected void Page_Load(object sender, EventArgs e) {
     if (Session["username"] != null) {
          string strSQLconnection = "Data Source=dbServer;Initial Catalog=testDB;Integrated Security=True";
          SqlConnection conn = new SqlConnection(strSQLconnection);
          conn.Open();
          SqlCommand command = new SqlCommand("select * from table1 where username =" + (string)(Session["username"], sqlConnection);
          SqlDataReader reader = sqlCommand.ExecuteReader();
          GridView1.DataSource = reader;
          GridView1.DataBind();
     }
}
于 2012-12-11T08:22:49.987 に答える
0

次のようにするSqlDataSource必要があります。SessionField="username"正しいことを確認してください。

<asp:SqlDataSource 
    ID="SqlDataSource1"
    Runat="server" 
    SelectCommand="SELECT S.[ID], S.[Survey_Name], S.[Start_Date], 
                 S.[End_Date], C.[Category_Name], S.[Username], S.[Audience] 
                 FROM [Survey] S Inner Join Category C 
                      On S.Category_ID = C.ID Where Username = @Username"
    SelectCommandType="Text"
    ConnectionString="<%$ ConnectionStrings:YourConnStringName %>">
    <SelectParameters>
       <asp:SessionParameter Name="Username" DbType="String" 
            DefaultValue=""  SessionField="username"/>

    </SelectParameters>
</asp:SqlDataSource>

注:SessionParameterであることを確認してください。SelectParameter

于 2012-12-11T08:54:19.373 に答える