为什么ExecuteReader只返回1行数据



我有这段代码,它只返回第一个字符串[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();
            }
        }

相关内容

  • 没有找到相关文章

最新更新