我有这段代码,它只返回第一个字符串[0],其余的都有错误,说索引超出了数组,这意味着只有一行被拉,但我不知道为什么!!!
MySqlConnection connection = new MySqlConnection(MyConString);
MySqlCommand command = new MySqlCommand("SELECT email_address FROM account_info", connection);
MySqlDataReader reader;
try
{
connection.Open();
reader = command.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
textBox1.Text = reader[0].ToString();
textBox2.Text = reader[0].ToString();
textBox3.Text = reader[0].ToString();
}
reader.Close();
}
reader[0]
访问读卡器的第一个字段,而不是第一行。查看MSDN中的示例代码。
// Call Read before accessing data.
while (reader.Read())
{
Console.WriteLine(String.Format("{0}, {1}",
reader[0], reader[1]));
}
这将写出每行的第一列和第二列。
此外,我真的不确定为什么不使用using
语句,以及为什么在finally
块中调用ExecuteReader
——这两个看起来都很奇怪。
您只得到一行,因为您只调用了reader.Read()
一次。每次调用Read()
时,读取器都会前进到下一行并返回true;或者,当读取器前进到最后一行时,返回false。
索引器从其他列返回数据,并且查询中只有一列;这就是索引1和2失败的原因。
编辑:
如果你试图在阅读器中循环,你需要把你的三个文本框放在一个可以循环的结构中。更简单,但不那么灵活,但正确:
if (reader.HasRows)
{
reader.Read()
textBox1.Text = reader[0].ToString();
reader.Read()
textBox2.Text = reader[0].ToString();
reader.Read()
textBox3.Text = reader[0].ToString();
reader.Close();
}
更灵活:
List<TextBox> boxes = new List<TextBox> { textBox1, textBox2, textBox3 };
for (int index = 0; index < boxes.Count; index++)
{
if (!reader.Read())
{
break; // in case there are fewer rows than text boxes
}
boxes[index] = reader[0].ToString();
}
以下是我所做的基本操作,用您需要的任何东西替换字符串EmailAddress部分:
using (SqlConnection SQL_Conn01 = new SqlConnection(SQLSync))
{
bool IsConnected = false;
try
{
SQL_Conn01.Open();
IsConnected = true;
}
catch
{
// unable to connect
}
if (IsConnected)
{
SqlCommand GetSQL = new SqlCommand("SELECT email_address FROM account_info", SQL_Conn01);
using (SqlDataReader Reader = GetSQL.ExecuteReader())
{
while (Reader.Read())
{
string EmailAddress = Reader.GetString(0).TrimEnd();
}
}
GetSQL.Dispose();
}
}