-1

これは私が参照する URL です: http://support.microsoft.com/kb/317559

私は彼らの方法を研究し、それらを適用しました.2_2を含めるまではすべて問題ありません.エラーメッセージ: データリーダーに現在のクエリはありません.

2_1 if ステートメントの下にある drSelect1_1 を既に閉じています。閉じる必要があります。そうしないと、新しいものを作成できません。問題は、drSelect1_1 を再度開いて 2_2 に使用できるようにする方法です。drSelect1_1 を使用する代わりに drSelect1_1a を作成しようとしましたが、エラーが発生しました: Read() を呼び出す前にフィールドにアクセスする試みが無効です。何かアドバイス?以下のようなコード:

cmdSelect.CommandText = "SELECT * FROM member WHERE username = @username";

connSelect.Open();

MySqlDataReader drSelect1_1 = cmdSelect.ExecuteReader();

if (drSelect1_1.Read())
{
     //1_1
     this.lbl1_1.Text = drSelect1_1["username"].ToString();

     //2_1
     if (drSelect1_1["direct1"].ToString() != "")
     {
        //this.ib2_1.Visible = true;
        this.lbl2_1.Text = drSelect1_1["direct1"].ToString();
        drSelect1_1.Close();

        cmdSelect.CommandText = "SELECT * FROM member WHERE username = '" + this.lbl2_1.Text + "'";
        MySqlDataReader drSelect2_1 = cmdSelect.ExecuteReader();

        if (drSelect2_1.Read())
        {                  
             drSelect2_1.Close();
        }
    }

    //2_2            
    if (drSelect1_1["direct2"].ToString() != "")
    {

    }
}
connSelect.Close();
4

1 に答える 1

1

編集#2

よし、それならば。リーダーを閉じる前に、ブロックの先頭で変数に値を割り当てます。それはあなたを多くのトラブルから救います。:)

if (drSelect1_1.Read())
{
     string username = drSelect1_1["username"].ToString();
     string direct1 = drSelect1_1["direct1"].ToString();
     string direct2 = drSelect1_1["direct2"].ToString();

     drSelect1_1.Close();

     //1_1
     this.lbl1_1.Text = username;

     //2_1
     if (direct1 != "")
     {
        //this.ib2_1.Visible = true;
        this.lbl2_1.Text = direct1;

        cmdSelect.CommandText = "SELECT * FROM member WHERE username = '" + this.lbl2_1.Text + "'";
        MySqlDataReader drSelect2_1 = cmdSelect.ExecuteReader();

        if (drSelect2_1.Read())
        {                  
             drSelect2_1.Close();
        }
    }

    //2_2            
    if (direct2 != "")
    {

    }
}

データ リーダーを閉じて、drSelect1_1.Close();再度アクセスしようとしました

if (drSelect1_1["direct2"].ToString() != "")

この行を削除

drSelect1_1.Close();

または、ブロック内の の前に移動}しますRead()

編集

の別のインスタンスを作成するだけで、次のMySqlCommandようにします。

MySqlCommand cmdSelect2 = new MySqlCommand("SELECT * FROM member WHERE username = '" + this.lbl2_1.Text + "'", connSelect);
MySqlDataReader drSelect2_1 = cmdSelect2.ExecuteReader();

したがって、上記の行を安全に削除できます。

于 2012-07-14T03:26:29.090 に答える