2016-03-02 38 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

因此,清晰的閱讀器是null..Now去檢查你的連接字符串和查詢(如果可能的話,下拉選擇的值測試是sql首先) –

+0

在正確的路徑,但閱讀器和連接應該在'using(){.. ''塊。原始代碼中沒有循環。 –