2015-11-01 124 views
0

我认为一切都很好,那么为什么数据不会显示在文本框中。我多次使用此代码。那么这里有什么错误?我在Visual Studio 2012中工作。从数据库中选择查询

string name = comboBox1.SelectedIndex.ToString(); 

query = "select *from Record Where Name='"+name+"'"; 
cmd = new SqlCommand(query, con); 

con.Open(); 
SqlDataReader dr = cmd.ExecuteReader(); 

while (dr.Read()) 
{ 
    textBox1.Text =(dr["Items1"].ToString()); 
    textBox2.Text = (dr["Items1_Charge"].ToString()); 
    textBox3.Text = (dr["Items2"].ToString()); 
    textBox4.Text = (dr["Items2_Charge"].ToString()); 
    textBox5.Text = (dr["Items3"].ToString()); 
    textBox6.Text = (dr["Items3_Charge"].ToString()); 
    textBox7.Text = (dr["Items4"].ToString()); 
    textBox8.Text = (dr["Items4_Charge"].ToString());    
} 
+2

究竟是什么错误?在哪一行?你调试了你的代码吗?您的'* from'部分需要一个空格作为'* from'。 –

+1

哦,不,不要连接字符串查询。训练自己使用[参数](http://www.dotnetperls.com/sqlparameter)来防止[SQL注入](https://en.wikipedia.org/wiki/SQL_injection)。 – venerik

+0

也,为什么使用while循环来设置相同的控制?假设你期望你的查询只返回一条记录,只需调用一次'dr.Read()' –

回答

1

我会怀疑* from应该是* from。另外我会建议使用下面显示的where条件的参数,特别是当有嵌入撇号的机会时。另外请注意,我添加了HasRows,所以我们确信有东西回来了。我也改变你如何从组合框中获得当前值

public void Sample() 
{ 
    string name = comboBox1.Text; 
    query = "select * from Record Where Name= @Name"; 

    cmd = new SqlCommand(query, con); 
    cmd.Parameters.AddWithValue("@Name", name); 

    con.Open(); 
    SqlDataReader dr = cmd.ExecuteReader(); 

    if (dr.HasRows) 
    { 
     while (dr.Read()) 
     { 
      textBox1.Text = (dr["Items1"].ToString()); 
      textBox2.Text = (dr["Items1_Charge"].ToString()); 
      textBox3.Text = (dr["Items2"].ToString()); 
      textBox4.Text = (dr["Items2_Charge"].ToString()); 
      textBox5.Text = (dr["Items3"].ToString()); 
      textBox6.Text = (dr["Items3_Charge"].ToString()); 
      textBox7.Text = (dr["Items4"].ToString()); 
      textBox8.Text = (dr["Items4_Charge"].ToString()); 
     } 
    } 
} 
+0

thanx所有我得到它 – Saadii