C#SqlDataReader只读取1行

时间:2017-06-04 22:24:38

标签: c# sql-server sqldatareader

我正在尝试从数据库中读取数据以存储在数组中,但是SqlDataReader只读取1行,这是最后一行还是第一行,具体取决于我使用ORDER BY DESC还是ASC这似乎让我烦恼。

代码:

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但它对我来说并没有真正起作用,我在google上搜索并尝试了所有组合,但似乎没有任何效果,我无法让它从阅读到最后一行阅读..

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

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

1 个答案:

答案 0 :(得分: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++;
}