f farihin Ответов: 2

Я хочу, чтобы отобразить данные на ASP.NET текстовое поле на основе идентификатора сеанса. Но на странице ничего не происходит.


SqlConnection con = new SqlConnection("источник данных=USER-PC;начальный каталог=1GCAttendanceManagementSystem;Интегрированная безопасность=True");
DataTable dt = новый DataTable();
против.Открыть();
SqlDataReader myReader = null;
Команда sqlcommand myCommand = новая команда sqlcommand("выберите * от сотрудника, где EmpUsername='" + сессия["ИД"] + "'", кон);

myReader = myCommand.Метода executereader();

пока (myReader.Читать())
{
txtCode.Text = (myReader["EmployeeId"].Метод toString());
txtUsername.Text = (myReader["EmpUsername"].Метод toString());
txtPass.Text = (myReader["EmpPassword"].Метод toString());
txtEmail.Text = (myReader["EmpEmail"].Метод toString());
txtFirstname.Text = (myReader["EmpFirstName"].Метод toString());
txtLastname.Text = (myReader["EmpLastName"].Метод toString());
txtGender.Text = (myReader["EmpGender"].Метод toString());
txtContact.Text = (myReader["EmpContact"].Метод toString());
txtAddress.Text = (myReader["EmpAddress"].Метод toString());
txtDept.Text = (myReader["EmpDept"].Метод toString());

}
против.Закрывать();

Что я уже пробовал:

Я попробовал кодирование. Но все текстовые поля пусты. Вообще ничего не происходит.

F-ES Sitecore

Если код не входит в цикл while (используйте отладчик для пошагового выполнения), то ваш запрос не возвращает никаких строк. Это произойдет потому, что сеанс["id"] не будет таким, как вы ожидаете, или в базе данных нет ничего, что соответствовало бы ему. Мы не знаем, что находится в вашем сеансе или вашей базе данных, поэтому не можем сказать больше.

Richard Deeming

Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]

using (SqlConnection con = new SqlConnection("..."))
using (SqlCommand myCommand = new SqlCommand("select * from Employee where EmpUsername = @id", con))
{
    myCommand.Parameters.AddWithValue("@id", Session["id"]);
    
    con.Open();
    using (SqlDataReader myReader = myCommand.ExecuteReader())
    {
        if (myReader.Read())
        {
            txtCode.Text = Convert.ToString(myReader["EmployeeId"]);
            ...
        }
    }
}

f farihin

Теперь это работает

2 Ответов

Рейтинг:
2

Mukthahar Shaik

какой тип сеанса данных["id"] состоит?

вы сравниваете empusername с id.

вы должны сравнить empuserid с id.


Рейтинг:
15

#realJSOP

0) поместите свой код в try/catch блок.

1) в верхней части try блок, поставь это так

if (string.IsNullOrEmpty(Session["id"])) { throw new Exception("Session ID has not been set");}


2) запустите код под отладчиком с точкой останова, установленной в catch блок.

3) ваш код, как правило, не очень хорошо построен. Сделайте это так вместо этого:

try
{
    if (string.IsNullOrEmpty(Session["id"])) 
    {
        // throw an exception so that the code doesn't perform an unnecessary 
        // database query
        throw new Exception("Session ID has not been set");
    }
    using (SqlConnection con = new SqlConnection("Data Source=USER-PC;Initial Catalog=1GCAttendanceManagementSystem;Integrated Security=True"))
    {
        DataTable dt = new DataTable();
        con.Open();
        SqlDataReader myReader = null;
        using (SqlCommand myCommand = new SqlCommand("select * from Employee where EmpUsername='" + Session["id"] + "'", con){CommandType=CommandType.Text})
        {
            myReader = myCommand.ExecuteReader();
            if (!myReader.HasRows)
            {
                // Do something if the reader doesn't have data. This could be an exception 
                // or other indication to the user that something unexpected happened.
            }
            while (myReader.Read())
            {
                // The exception handler will trigger if the expected fields don't exist 
                // in the returned row
                txtCode.Text = (myReader["EmployeeId"].ToString());
                txtUsername.Text = (myReader["EmpUsername"].ToString());
                txtPass.Text = (myReader["EmpPassword"].ToString());
                txtEmail.Text = (myReader["EmpEmail"].ToString());
                txtFirstname.Text = (myReader["EmpFirstName"].ToString());
                txtLastname.Text = (myReader["EmpLastName"].ToString());
                txtGender.Text = (myReader["EmpGender"].ToString());
                txtContact.Text = (myReader["EmpContact"].ToString());
                txtAddress.Text = (myReader["EmpAddress"].ToString());
                txtDept.Text = (myReader["EmpDept"].ToString());
            }
        }
    }
    // Put a breakpoint on the following curly brace so you can establish that the 
    // code is working without problems (assuming your ducks are otherwise all in a row)
}
catch (Exception ex)
{
    // do something appropriate to indicate whatever problem arises
    // if you're debugging, put a breakpoint on either of the curly braces to stup exceution
}


Richard Deeming

- Сделай это так, а не иначе."
"выберите * из Employee where EmpUsername='" + Session["id"] + "'"

Нееееет!!!!!!

using (SqlCommand myCommand = new SqlCommand("select * from Employee where EmpUsername = @Id", con){CommandType=CommandType.Text})
{
    myCommand.Parameters.AddWithValue("@Id", Session["id"]);
    ...
}


Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]

#realJSOP

Я просто скопировал его код и внес несколько изменений. Я только что смотрел на свой ответ и увидел, что проигнорировал эту строку (меня больше беспокоила неспособность кода раскрыть исключение, которое он не обрабатывал), и собирался исправить его, но вы его прикрыли. :)