2012-07-09 4 views
0

전에이 새로운 "MySqlConnection"및 "MySqlCommand"2_1 및 2_2 만들지 만 내 코드를 매우 길고 혼란스럽게 만들 것입니다, 그래서 내가 이미 선언 한 이들을 재사용하기로 결정했습니다. 1_1. 나는 짓을 다음과 같이한다 :asp.net 재사용 연결 및 명령

오류가
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에서 "데이터 판독기 없음 현재 쿼리가?" 나에게 조언을 주시기 바랍니다 들으 :)

+0

분명하고 진실한 질문이있는 경우 위로 –

답변

0

확인에 null 행에서, 내가 나오지 않습니다 내 생각은 이미 내 기원 방법으로 돌아 간다. 내 시간이 허락한다면 나는이 질문으로 돌아갈 것이다. 이제는 여러분이 참고할 수 있습니다. 더 나은 해결책이 있으시면 알려주십시오. :) 많이 감사드립니다.
기본적으로 내 생각은 모든 "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(); 
0

while(drSelect1_1.read()) 
{ 

// IF CONDITIONS 

} 

처럼 독자를 통해이 방법을 반복하여 '경우'조건을 실행해야 당신이

+0

IF 또는 WHILE은 여기에서 전혀 다른 점이 없습니다. 2_1을 2_1의 맨 위에 놓으면 코드가 다시 작동합니다. 나는 connSelect.Close();와 connSelect.Open();에서 2_1 – melvintcs

+1

이 잘못되었다고 생각한다. 그렇지 않다면 연결을 반복 할 때 연결을 닫지 않아야한다. 어쨌든 while 루프는 하나의 열린 연결에서만 반복되도록 제안했습니다. 날 오해하지 마. 감사합니다 –

+1

@melvintcs - [MSDN] (http://msdn.microsoft.com/en-us/library/haa3afyz(v=vs.71) .aspx) DataReader가 열려있는 동안 Connection이 사용 중입니다. 그 DataReader에 의해 독점적으로. 원본 DataReader가 닫힐 때까지 다른 DataReader 만들기를 포함하여 Connection에 대한 명령을 실행할 수 없습니다. – adatapost