2014-08-29 2 views
0

Select 메서드에 저장된 정보를 어떻게 문자열로 변환합니까? match_id 열에서 최대 값을 가져 와서 command.CommandText에서 해당 값을 matchCode 문자열로 가져 오려고합니다. 내가 여기서 어디로 갈거야?C# 변수를 데이터베이스로 설정

string connectString = "Server=myServer;Database=myDB;Uid=myUser;Pwd=myPass;"; 
    string matchCode = ""; 
    MySqlConnection connect = new MySqlConnection(connectString); 
    MySqlCommand command = connect.CreateCommand(); 
    command.CommandText = "SELECT MAX(VAL(match_id)) FROM `data`"; 

    try 
    { 
     connect.Open(); 
     command.ExecuteNonQuery(); 
     matchCode = "??"; 
     connect.Close(); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex.Message); 
    } 

나는 그것을 시험해 본 네 번째 날과 마찬가지로 C#을 처음 사용합니다. 도와 주셔서 감사합니다!

+0

matchCode = command.ExecuteScalar(). ToString(); – IVAAAN123

+0

'ExecuteNonQuery()'는 문제입니다. 결과를 원하지 않는다고 말하는 것입니다. 'ExecuteScalar()'를 원한다면, 결과 셋의 첫 번째 행에 첫 번째 값을 포함하는 객체를 반환합니다. – Blorgbeard

+0

질문을 수정하지 말고 답을 구하십시오. 나중에 읽고있는 사람들은 무슨 일이 일어나고 있는지 이해하지 못할 것입니다. – Blorgbeard

답변

2

ExecuteNonQuery() 메서드는 INSERT/UPDATE/DELETE 쿼리 용입니다. 단일 값을 다시 얻으려면 ExecuteScalar()을 사용하십시오. 전체 결과를 다시 얻으려면 ExecuteReader() 또는 Fill() DataSet 개체를 사용하십시오. 내가 .Close()를 호출하지 않는

  • :

    public int GetMatchCode() 
    { 
        //this could be loaded from config file or other source 
        string connectString = "Server=myServer;Database=myDB;Uid=myUser;Pwd=myPass;"; 
        string sql = "SELECT MAX(VAL(match_id)) FROM `data`"; 
        using (var connect = new MySqlConnection(connectString)) 
        using (var command = new MySqlCommand(sql, connect)) 
        { 
         connect.Open(); 
         var result = command.ExecuteScalar(); 
         if (result == DBNull.Value) 
         {    
          //what you do here depends on your application 
          // if it's impossible for the query to return NULL, you can even skip this 
         } 
         return (int)result; 
        } 
    } 
    

    변화 중 일부는 설명이 필요 :

    또한, 당신이 일을해야 C 번호에 관용적있는 몇 가지가 있습니다. 예외가 발생하더라도 using 블록이 나를 대신 처리합니다. 예외가 발생하면 이전 코드로 인해 연결이 끊어졌습니다.

  • . 닷넷 개발자는 매우 작은 방법을 믿는 경향이 있습니다. 그 이상으로,이 메소드는 다른 간단한 공용 데이터 액세스 메소드와 클래스의 공통 코드를 추상화하는 몇 가지 개인용 헬퍼 메소드 또는 특성 만 갖는 클래스의 일부 여야합니다.
  • 예외 처리 코드는 여기에 없습니다. 일반 데이터베이스 액세스 클래스의 일부인 작은 메서드가있는 경우에는 예외 처리가 더 높은 수준에서 수행되어야합니다. 여기서 처리 방법을 결정하는 것이 더 유리합니다.
+0

관리되는'IDisposable '생명주기에 대해'사용 중 '으로 +1합니다. 객체 범위를보다 잘 이해할 수 있으므로 코드를 훨씬 더 정리합니다. –

+0

감사합니다. 작동 중입니다. 한 가지 더, 비록 내가 찾고있는 데이터가 Int 형식에서 필요하다면 어떻게 작동할까요? – Kragalon

+0

@Kragalon 리턴 타입을'int'로 변경하고,'DBNull'을 검사 할 라인을 추가하고, int에 캐스트를 추가해야합니다. 지금 당신이 Val() 함수를 사용하고있는 것을 보았습니다, 그래서 이것을 보여주기 위해 답을 업데이트 할 것입니다. –

관련 문제