2017-06-04 118 views
0

我试图从数据库中读取数据以存储在数组中,但SqlDataReader只读取1行,这是最后一行还是第一行,具体取决于我是否使用ORDER BY DESCASC,这看起来会对我造成影响。C#SqlDataReader只读取1行

代码:

private void chkAdr() 
{ 
    string connStr = "Data Source=MARINCHI\\SQLEXPRESS;Initial Catalog=login1;Integrated Security=True"; 

    SqlConnection conn = new SqlConnection(connStr); 
    conn.Open(); 

    SqlCommand getAdr = new SqlCommand("SELECT adress, floor,city, state, country, zipcode FROM userAdress where userID = @userID", conn); 

    SqlParameter parUserID = new SqlParameter("@userID", Login.id); 
    getAdr.Parameters.Add(parUserID); 

    getAdr.ExecuteNonQuery(); 

    SqlDataReader dr = getAdr.ExecuteReader(); 

    string[] adress = new string[100]; 
    string[] floor = new string[100]; 
    string[] city = new string[100]; 
    string[] state = new string[100]; 
    string[] country = new string[100]; 
    string[] zipcode = new string[100]; 

    while (dr.Read()) 
    { 
     int count = dr.FieldCount; 

     for (int i = 0; i < count; i++) 
     { 
      adress[i] = dr["adress"].ToString(); 
      floor[i] = dr["floor"].ToString(); 
      city[i] = dr["city"].ToString(); 
      state[i] = dr["state"].ToString(); 
      country[i] = dr["country"].ToString(); 
      zipcode[i] = dr["zipcode"].ToString(); 
     } 

     // test to see, what values I get, no matter what adress[i] for I any number, always get the last data from my table in sql... 
     textBox5.Text = adress[0]; 
     textBox6.Text = floor[0]; 
     textBox7.Text = city[0]; 
     textBox8.Text = state[1]; 
     textBox9.Text = country[1]; 
     textBox10.Text = zipcode[1]; 
    } 

    dr.Close(); 
} 

我试图dr.HasRows,但它并没有真正为我工作,我搜索谷歌和尝试所有的组合,但似乎没有任何工作,我不能让它与合作阅读从乞讨到最后一行..

这应该是我的代码中的一个组件从数据库中检索地址如果用户之前添加了他的地址,如果它结束了true,它将被添加到组合框中作为选项“保存的地址1“,当你点击它时,它应该显示在文本框中。如果有2个地址,则相同,都应添加。

正如我所说的我的问题是我无法读取用户添加的所有地址,因为SqlDataReader只读取最后一行或第一行。如果有人有关于如何做到这一点的想法,请帮助!谢谢!

+2

你为什么要执行的ExecuteNonQuery然后的ExecuteReader? – hardkoded

+0

ExecuteNonQuery cuz im使用执行sql命令时使用的参数,并执行读取器从db读取数据并能够将em存储在数组中。 – Rin

+0

你不需要调用getAdr.ExecuteNonQuery(),ExecuteReader就足够了 – hardkoded

回答

3

你的循环是不正确的,你应该这样写:

int i = 0; 
while (dr.Read()) 
{    
    adress[i] = dr["adress"].ToString(); 
    floor[i] = dr["floor"].ToString(); 
    city[i] = dr["city"].ToString(); 
    state[i] = dr["state"].ToString(); 
    country[i] = dr["country"].ToString(); 
    zipcode[i] = dr["zipcode"].ToString(); 
    i++; 
} 
+0

注意到,但仍然没有解决问题,我用for循环与我<3而不是我 Rin

+0

)你在while循环中有循环,所以你写同一行三次,重写你在那里的所有内容,最后一行结束三次 –

+0

哦,我看到了现在的问题是什么。让我尝试一下。 – Rin