처음으로 여기에 도움을 요청합니다.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 ...은 쿼리와 일치하는 행이없는 것처럼 루프되지 않습니다.
이제는 그 문제를 해결하기 위해해야 할 일을 잃어 버렸습니다. 모든 도움을 환영합니다! 많이 도와 주셔서
감사합니다 :)