0

この前に、2_1と2_2用に新しい「MySqlConnection」と「MySqlCommand」を作成しますが、コードが非常に長くなり、混乱するため、1_1用にすでに宣言したこれらを再利用することにしました。私はそれを以下のように行いました:

MySqlConnection connSelect = new MySqlConnection(connectionString);
MySqlCommand cmdSelect = connSelect.CreateCommand();

cmdSelect.Parameters.Add("username", MySqlDbType.VarChar);
cmdSelect.Parameters["username"].Value = Request.QueryString["username"].ToString();

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() != null)
{
    this.lbl2_1.Text = drSelect1_1["direct1"].ToString();

    connSelect.Close();
    cmdSelect.CommandText = "SELECT * FROM member WHERE username = '" + this.lbl2_1.Text + "'";
    connSelect.Open();

    MySqlDataReader drSelect2_1 = cmdSelect.ExecuteReader();

if (drSelect2_1.Read())
{
//some code
}
}

//2_2
if (drSelect1_1["direct2"].ToString() != null)      //ERROR HERE
{
    this.lbl2_2.Text = drSelect1_1["direct2"].ToString();
}
}

エラーがあります:2_2に「データリーダーに現在のクエリがありません」、ここで間違っていましたか?私にアドバイスしてくださいthx:)

4

2 に答える 2

0

このようにリーダーを反復処理して、「if」条件を実行する必要があります。

while(drSelect1_1.read())
{

// IF CONDITIONS

}

このようにして、null行に遭遇することはありません

于 2012-07-09T07:26:39.567 に答える
0

わかりました、私はすでに私の考えから外れています、私は私の元の方法に戻ります。時間が許せば、この質問に戻ります。だから今ではあなたたちはそれを参照として取ることができます。より良い解決策がある場合は、それを私たちと共有してください。:)どうもありがとう。
したがって、基本的に、私の考えは、すべての「IF」条件に対してすべてのMySqlConnection、MySqlCommand、およびMySqlDataReaderを作成することです。どうぞ。

  MySqlConnection connSelect = new MySqlConnection(connectionString);
  MySqlCommand cmdSelect = connSelect.CreateCommand();

  cmdSelect.Parameters.Add("username", MySqlDbType.VarChar);
  cmdSelect.Parameters["username"].Value = Request.QueryString["username"].ToString();

  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() != null)
      {
          this.lbl2_1.Text = drSelect1_1["direct1"].ToString();
          MySqlConnection connSelect2_1 = new MySqlConnection(connectionString);
          MySqlCommand cmdSelect2_1 = connSelect2_1.CreateCommand();

          cmdSelect2_1.CommandText = "SELECT * FROM member WHERE username = '" + this.lbl2_1.Text + "'";

          connSelect2_1.Open();

          MySqlDataReader drSelect2_1 = cmdSelect2_1.ExecuteReader();

          if (drSelect2_1.Read())
          {
              //some code
          }
          connSelect2_1.Close();
      }

      //2_2
      if (drSelect1_1["direct2"].ToString() != null)
      {
          this.lbl2_2.Text = drSelect1_1["direct2"].ToString();

          MySqlConnection connSelect2_2 = new MySqlConnection(connectionString);
          MySqlCommand cmdSelect2_2 = connSelect2_2.CreateCommand();

          cmdSelect2_2.CommandText = "SELECT * FROM member WHERE username = '" + this.lbl2_2.Text + "'";

          connSelect2_2.Open();

          MySqlDataReader drSelect2_2 = cmdSelect2_2.ExecuteReader();

          if (drSelect2_2.Read())
          {
              //some code
          }
          connSelect2_2.Close();          
      }
  }
  connSelect.Close();
于 2012-07-09T08:50:08.497 に答える