2016-07-22 2 views
0

그래서 에 연결하기위한 클래스는 Take입니다.. 그 클래스에는 mysql 테이블에서 마지막 레코드를 가져 오기위한 쿼리를 호출하는 메서드가 있습니다. 기본 폼에서 클래스에서 값 가져 오기

public void Balance() 
    { 
     string query = "SELECT balance FROM history ORDER BY id DESC LIMIT 1 "; 
     if (this.OpenConnection() == true) 
     { 
      MySqlCommand cmd = new MySqlCommand(query, connection); 
      cmd.ExecuteNonQuery(); 
     }   
    } 

나는 위의 코드에서, 내가 어떤 값 만 NULL을하지 않는 것이, 그 클래스와

take.Balance(); 

내가 아는 그 메소드를 호출하고있어, 그래서 내가 어떻게 해달라고 부탁 그 쿼리에서 가치를 취할 수 있고 그것을 기본 폼의 TextBox에 넣을 수 있습니까?

+0

함수'밸런스()'반환'void' ('돌아올 수없는 가치'와 같이) . 예를 들어 문자열로 변경하고 쿼리에서 데이터를 읽은 다음 (변경해야하는 'ExecuteNonQuery'는 값을 반환하지 않음)'return'으로 반환합니다. – Bobby

답변

2

이의 모습 보자 :

// You probably want to return value: decimal, not void 
public decimal Balance() { 
    // Make sql readable 
    string query = 
    @"SELECT balance 
     FROM history 
    ORDER BY id DESC 
     LIMIT 1 "; 

    // do not cache connection, but create a new one instead 
    using (MySqlConnection conn = new MySqlConnection(connectionStringHere)) { 
    conn.Open(); 

    // wrap IDisposable into using 
    using (MySqlCommand cmd = new MySqlCommand(query, conn)) { 
     // you want to return values: ExecuteReader (or ExecuteScalar) 
     // instead of ExecuteNonQuery 
     using (var reader = cmd.ExecuteReader()) { 
     if (reader.Read()) 
      return Convert.ToDecimal(reader.GetValue(0)); 
     else 
      return 0m; // cursor is empty, let's return 0 
     } 
    }   
    } 
} 
+0

고마워요! 하지만 지금은 내 기본 형식으로 그 값을 얻고 싶습니다'take.Balance(); '하지만 경고 1 필드'Budget.Form1.take '는 할당되지 않으며 항상 기본값 인 null을 갖습니다. 그 값을 텍스트 상자에 입력하려면 내 기본 양식에서 무엇을해야합니까? – Harikeinas

0

고려해야 할 두 가지 사항이 있습니다. 첫째, 쿼리

"SELECT balance FROM history ORDER BY id DESC LIMIT 1" 

데이터베이스에서 유용한 데이터, 그것은에 의해 영향을받는 행의 수를 반환하도록하는 방법 ExecuteNonQuery으로 실행되어서는 안된다 반환되어야한다는 점에서 쿼리입니다 비 쿼리 문의 둘째, Balance의 반환 유형은 void이 아닌 다른 유형, 예를 들어 int 또는 발신자에게 반환되어야하는 유사한 것으로 변경되어야합니다.

4

개인적으로 저는 프로그래밍에 대한 기본 지식을 향상시켜야한다고 생각합니다.

  1. 당신은 가치를 얻을 싶어하지만 함수 무효이며, 심지어 일부 변수
  2. ExecuteNonQuery는에 값을 설정 아무것도 반환하지 귀하의 케이스가되지 않습니다 귀하의 예제 코드에서 두 개의 큰 문제가 있습니다. 예를 들어

:

public string Balance() 
    { 
     string query = "SELECT balance FROM history ORDER BY id DESC LIMIT 1 "; 
     if (this.OpenConnection() == true) 
     { 
      MySqlCommand cmd = new MySqlCommand(query, connection); 
      return cmd.ExecuteScalar(); 
     }   
    } 
관련 문제