2016-03-02 54 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(){.. ''块。原始代码中没有循环。 –