2016-07-31 6 views
1

처음으로 여기에 도움을 요청합니다.MySqlDataReader는 반환 된 행이없는 것처럼 내 쿼리를 읽지 않지만 PHPMyAdmin은 동일한 쿼리로 행을 반환합니다.

내 제목이 잘못되었다는 것을 알고 있습니다. 한 번 문제가 무엇인지 파악하면 즉시 변경 될 것입니다.

알았어. 먼저 내 데이터베이스에서 현재 사용자의 범위에있는 모든 사용자를 선택하고 싶습니다. 보이는 여기 방법 C에서 # 이제

SET @orig_lat=45.820904; 
SET @orig_lon=-73.760549; 
SET @dist=1000 * 5;//5 KM 
SET @accountId=9; 

SELECT SQL_CALC_FOUND_ROWS *, (((acos(sin((@orig_lat*pi()/180)) * sin((account.latitude*pi()/180))+cos((@orig_lat*pi()/180))*cos((account.latitude*pi()/180))*cos(((@orig_lon-account.longitude)*pi()/180))))*180/pi())*60*1.1515*1609.344) AS distance FROM accounts AS account HAVING distance <= @dist AND account.id <> @accountId ORDER BY distance ASC LIMIT 50 OFFSET 0;0 

:

내가 그것을 phpMyAdmin을에서 4 개 행을 반환하는 쿼리를 실행하면, 오 내가 여기

MariaDB

사용하여 메신저를 언급해야 쿼리입니다
public static Dictionary<List<AccountData>, int> SearchAccounts(string accountId, double latitude, double longitude, int rangeInKM, int limit, int page = 1){ 
List<AccountData> returnList = new List<AccountData>(); 
int total_count = 0; 
query = "SELECT SQL_CALC_FOUND_ROWS *, (((acos(sin((@orig_lat*pi()/180)) * sin((account.latitude*pi()/180))+cos((@orig_lat*pi()/180))*cos((account.latitude*pi()/180))*cos(((@orig_lon-account.longitude)*pi()/180))))*180/pi())*60*1.1515*1609.344) AS distance FROM accounts AS account HAVING distance <= @dist AND account.id <> @accountId ORDER BY distance ASC LIMIT @limit OFFSET @page;"; 
var rows = Database.ExecuteQuery(query, 
       new QueryParameter("accountId", accountId), 
       new QueryParameter("orig_lat", latitude), 
       new QueryParameter("orig_lon", latitude), 
       new QueryParameter("dist", 1000 * rangeInKM), 
       new QueryParameter("limit", limit), 
       new QueryParameter("page", page - 1)); 

하는 executeQuery 기능 코드 :

public override DatabaseRow[] ExecuteQuery (string query, params QueryParameter[] parameters) 
    { 
     try 
     { 
      using (MySqlConnection connection = new MySqlConnection (connectionString)) 
      { 
       using (MySqlCommand command = new MySqlCommand (query, connection)) 
       { 
        foreach (QueryParameter parameter in parameters) 
         command.Parameters.AddWithValue(parameter.name, parameter.obj); 

        connection.Open(); 
        using (MySqlDataReader reader = command.ExecuteReader()) 
        { 
         int fieldCount = reader.FieldCount; 
         List<DatabaseRow> rows = new List<DatabaseRow>(); 

         while (reader.Read()) 
         { 
          //For each row create a DatabaseRow 
          DatabaseRow row = new DatabaseRow(); 

          //And add each field to it 
          for (int i = 0; i < fieldCount; i++) 
          { 
           row.Add(
            reader.GetName(i), 
            reader.GetValue(i) 
           ); 
          } 

          //Add it to the rows 
          rows.Add(row); 
         } 

         return rows.ToArray(); 
        } 
       } 
      } 
     } 
     catch(MySqlException e) 
     { 
      throw new DatabaseException(e.Message, e); 
     } 
    } 

while (reader.read()) while ...은 쿼리와 일치하는 행이없는 것처럼 루프되지 않습니다.

이제는 그 문제를 해결하기 위해해야 ​​할 일을 잃어 버렸습니다. 모든 도움을 환영합니다! 많이 도와 주셔서

감사합니다 :)

답변

0

내가 쿼리 매개 변수의 경도와 위도를 분석하고, 내 문제가 무엇인지 파악 좋아.

누군가 코드를 필요로 할 때를 대비하여 남겨 둡니다.

var rows = Database.ExecuteQuery(query, 
      new QueryParameter("accountId", accountId), 
      new QueryParameter("orig_lat", latitude), 
      new QueryParameter("orig_lon", longitude), 
      new QueryParameter("dist", 1000 * rangeInKM), 
      new QueryParameter("limit", limit), 
      new QueryParameter("page", page - 1)); 

var rows = Database.ExecuteQuery(query, 
      new QueryParameter("accountId", accountId), 
      new QueryParameter("orig_lat", latitude), 
      new QueryParameter("orig_lon", latitude), 
      new QueryParameter("dist", 1000 * rangeInKM), 
      new QueryParameter("limit", limit), 
      new QueryParameter("page", page - 1)); 

을 변경하는 데 필요한) 항상 매개 변수를 다시 한 번 확인