1

私はこのコードを持っていて、最初の文字列[0]を返すだけで、インデックスが配列から外れているというエラーが残り、1行だけがプルされていることを意味しますが、なぜかわかりません!!!

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();
    }
4

3 に答える 3

5

reader[0]最初の行ではなく、リーダーから最初のフィールドにアクセスします。MSDNのサンプルコードを確認してください。

// Call Read before accessing data.
while (reader.Read())
{
    Console.WriteLine(String.Format("{0}, {1}",
            reader[0], reader[1]));
}

これにより、各行の1列目と2列目が書き出されます。

また、usingなぜステートメントを使用していないのか、なぜブロックExecuteReaderで呼び出しているのかはよくわかりませんfinally。どちらも奇妙に見えます。

于 2012-02-15T22:11:17.873 に答える
2

呼び出しは1回だけなので、1行しか取得できませんreader.Read()。を呼び出すたびRead()に、リーダーは次の行に進み、trueを返します。または、リーダーが最後の行を超えて進むと、falseが返されます。

インデクサーは追加の列からデータを返しますが、クエリには1つの列しかありません。そのため、インデックス1と2は失敗しています。

編集:

リーダーをループしようとしている場合は、3つのテキストボックスをループできる構造に配置する必要があります。より単純ですが、柔軟性は劣りますが、正しいです:

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();
}    
于 2012-02-15T22:10:29.027 に答える
0

これが私がすることの基本です、文字列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();
            }
        }
于 2012-02-15T23:43:47.710 に答える