C# SqlDataReader 只读取 1 行
C# SqlDataReader reads only 1 row
我正在尝试从数据库中读取数据以存储在数组中,但是 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 并尝试了所有组合但似乎没有任何效果,我无法使用它从乞讨读到最后一行..
如果用户之前添加了他的地址,这应该是我从数据库中检索地址的代码的一个组成部分,如果结果为真,它将作为选项 "Saved address 1" 添加到组合框,当你点击它,它应该显示在文本框中。如果有 2 个地址,则相同,都应添加。
正如我所说,我的问题是我无法读取用户添加的所有地址,因为 SqlDataReader
只读取最后一行或第一行。如果有人知道我该怎么做这个,请帮忙!谢谢!
你的循环不正确,你应该这样读:
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++;
}
我正在尝试从数据库中读取数据以存储在数组中,但是 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 并尝试了所有组合但似乎没有任何效果,我无法使用它从乞讨读到最后一行..
如果用户之前添加了他的地址,这应该是我从数据库中检索地址的代码的一个组成部分,如果结果为真,它将作为选项 "Saved address 1" 添加到组合框,当你点击它,它应该显示在文本框中。如果有 2 个地址,则相同,都应添加。
正如我所说,我的问题是我无法读取用户添加的所有地址,因为 SqlDataReader
只读取最后一行或第一行。如果有人知道我该怎么做这个,请帮忙!谢谢!
你的循环不正确,你应该这样读:
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++;
}