2016-03-02 6 views
1

Может кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно? Я пытаюсь вызвать метод автоматически при загрузке страницы, однако он не работает.C# Поля страницы не заполняются, как ожидалось

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     customerInformation(); 

    } 
} 

protected void ddNames_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    customerInformation(); 
} 

private void customerInformation() 
{ 
    string dbString = ConfigurationManager.ConnectionStrings["TechSupportDBConString"].ConnectionString; 
    string query = "SELECT * FROM Customers WHERE Name='" + ddNames.Text + "'"; 

    SqlConnection Connection = new SqlConnection(dbString); 
    Connection.Open(); 

    SqlCommand Com = new SqlCommand(query, Connection); 
    SqlDataReader reader = Com.ExecuteReader(); 
    if (reader.Read()) 
    { 
     lblName.Text = reader["Name"].ToString() + "'s Personal Information"; 
     lblAddress.Text = reader["Address"].ToString() + "\n" + reader["City"].ToString() + " " + reader["State"].ToString() + " " + reader["ZipCode"].ToString(); 
     lblPhone.Text = reader["Phone"].ToString(); 
     lblEmail.Text = reader["Email"].ToString(); 

     reader.Close(); 
     Connection.Close(); 
    } 
} 
+0

Вы пробовали отладку? – Alex

+0

Что такое проблема? 'IsPostBack' означает, что ваша' customerInformation' будет вызываться только при загрузке страницы в первый раз. В последующих обратных передачах этот метод не будет вызываться снова, что ожидается поведением. Однако, если вы хотите загрузить информацию о клиентах на некоторых нажмите кнопку, чтобы явно вызвать 'customerInformation' –

+0

@Neel. Я хочу, чтобы все метки были обновлены с использованием надлежащих данных из базы данных, поскольку страница загружается в первый раз. Поскольку в раскрывающемся списке будет уже выбранное значение. – HereToLearn

ответ

2

ОК, просматривая ваш код. Я вижу, что соединение считывателя и базы данных закрыто в цикле, которое не должно выполняться.

SqlDataReader reader = command.ExecuteReader();  
if (reader.HasRows) 
{ 
    while (reader.Read()) 
    { 
       //populate fields from reader 
    } 
} 
else 
{ 
    lbl.Text = "No records found."; 
} 
reader.Close(); 
Connection.Close(); 

Следующая вещь, которую я заметил, что выпадающий выбранный текст/значение должно быть либо ddNames.SelectedItem.Text или в случае, если значения прохождения ddNames.SelectedValue.

Следующее, убедитесь, что каждое имя читателя должно точно совпадать с именем столбца таблицы.

И последнее, но не менее важное: всегда выполняйте нулевую проверку перед применением ToString(). Если любой столбец имеет нулевое значение, ToString() не сможет преобразовать.

Надеюсь, это поможет.

+0

Как ни странно, я получаю «Нет записей». сообщение при загрузке страницы. Но выпадающий список работает отлично. – HereToLearn

+0

Итак, читатель имеет нулевое значение. Теперь переходите и проверяйте строку и запрос на соединение. (Если возможно, с выпадающим выбранным значением test сначала является sql) –

+0

На правильном пути, но читатель и соединение должны быть в 'using() {.. .} '. И в исходном коде нет цикла. –