2011-04-24 6 views
0

별칭 및 매개 변수를 사용하는 MySQL Select Where 문에 문제가 있습니다. 내 문제는 진술의 Where 부분에 있습니다. 그대로, 매개 변수를 사용하려고하면 결과가 반환되지 않습니다. 문제MySql 쿼리 - 별칭 및 매개 변수를 선택하십시오.

문은 다음과 같습니다 올바른 매개 변수와이 쿼리를 실행

SELECT postcode, suburb, streetname, categorycode, DATE_FORMAT(dateRecorded, '%d/%m/%Y') AS Expr1, DATE_FORMAT(dateLastModified, '%d/%m/%Y') AS Expr2, status FROM incidentdetails WHERE (postcode = @postcode) AND (suburb = @suburb) AND (categorycode = @categorycode) AND (status = @status) 

우측 열,하지만 데이터를 반환합니다.

전체적으로 where 절을 제거하면 전체 테이블을 예상대로 가져옵니다.

WHERE (postcode = @postcode) AND (suburb = @suburb) AND (categorycode = @categorycode) AND (status = @status)에서 WHERE (postcode = 4020)까지 where 절을 변경하면 예상대로 작동합니다.

WHERE 절을 (postcode = @postcode)로 바꾸고 매개 변수를 전달하면 (아래 참조) 작동하지 않습니다. 서버 탐색기 SQL 명령에서 실행할 때

sqlFillRelated.Parameters.AddWithValue("@postcode", int.Parse(PostcodeTxtBox.Text.ToString()))

(매개 변수) 전체 쿼리가 성공적으로 작동합니다.

 string sqlFILL = "SELECT postcode, suburb, streetname, categorycode, DATE_FORMAT(dateRecorded, '%d/%m/%Y') AS Expr1, DATE_FORMAT(dateLastModified, '%d/%m/%Y') AS Expr2, status FROM incidentdetails WHERE (postcode = @postcode) AND (suburb = @suburb) AND (categorycode = @categorycode) AND (status = @status)"; 
    string sql = "SELECT COUNT(*) FROM incidentdetails WHERE (postcode = @postcode) AND (suburb = @suburb) AND (categorycode = @categorycode) AND (status = @status)"; 
    MySqlConnection mycon = new MySqlConnection(sqlconnection); 
    mycon.Open(); 
    MySqlCommand selectRelatedCmd = new MySqlCommand(sql, mycon); 
    MySqlCommand sqlFillRelated = new MySqlCommand(sqlFILL, mycon); 
    int matches = 0; 
    selectRelatedCmd.Parameters.AddWithValue("@postcode", int.Parse(PostcodeTxtBox.Text.ToString())); 
    selectRelatedCmd.Parameters.AddWithValue("@suburb", SuburbTxtBox.Text.ToString()); 
    selectRelatedCmd.Parameters.AddWithValue("@categorycode",IncidentTypeDropList.Text.ToString()); 
    selectRelatedCmd.Parameters.AddWithValue("@status", "Open"); 
    sqlFillRelated.Parameters.AddWithValue("@postcode", int.Parse(PostcodeTxtBox.Text.ToString())); 
    sqlFillRelated.Parameters.AddWithValue("@suburb", SuburbTxtBox.Text.ToString()); 
    sqlFillRelated.Parameters.AddWithValue("@categorycode", IncidentTypeDropList.Text.ToString()); 
    sqlFillRelated.Parameters.AddWithValue("@status", "Open"); 

    matches = int.Parse(selectRelatedCmd.ExecuteScalar().ToString()); 
    if (matches == 0) 
    { 
     matchingIncidentPanel.Visible = false; 
    } 
    else if (matches >= 1) 
    { 
     matchingIncidentPanel.Visible = true; 
    } 

    MySqlDataAdapter da = new MySqlDataAdapter(sqlFILL, mycon); 
    DataTable table = new DataTable(); 
    table.Locale = System.Globalization.CultureInfo.InvariantCulture; 
    da.Fill(table); 
    g.DataSource = table; 
    g.DataBind(); 

    mycon.Close(); 
+0

MySQL에 액세스하는 언어의 태그도 추가해야한다고 생각합니다. – stalker

답변

0

좋아, 내가 (C#을? 그것입니다) 어떤 언어 사용중인 확실하지이기 때문에 이것은 긴 샷 그러나 당신이 매개 변수를 설정할 때 @ 사용하는 것이 나를 이상한 파업.

일반적으로 일부 마법 문자를 사용하여 SQL 쿼리의 매개 변수를 나타내지 만 프로그래밍 방식으로 설정하면이 문자를 생략합니다.

sqlFillRelated.Parameters.AddWithValue("status", "Open") 

대신

sqlFillRelated.Parameters.AddWithValue("@status", "Open") 

의 시도 했습니까?

+0

저는 데이터베이스로 MySql을 사용하여 ASP 응용 프로그램을 개발하면서 C#을 사용하고 있습니다. @는 MySQL 쿼리의 매개 변수를 나타내며 AddWithValue 메서드는 (String ParameterName, object value)로 오버로드되며, 매개 변수 이름에 @가 있어야한다는 것을 알고 있습니다. (다른 쿼리에서 작동합니다. mysql이 명명 된 쿼리를 지원합니까?). – Travis

0

C#입니다. '@'접두사를 C# 코드의 매개 변수에 둡니다.

+0

아. 두 분 덕분에 정말로 효과가 있습니다! @에서 명명 규칙을 어디에서 가져 왔습니까? – Travis

+0

MySQL 스크립트 규칙, 여러 SQL 저장 프로 시저 규칙, 모든 것. * 기분 나쁘게 생각하지 마라! * @ char가 일을 깨뜨리는 것은 고통스런 일이다. 나는 똑같은 일을했을 때 2 년 전에 그것을 알아 내는데 2 일이 걸렸다. 그리고 너는 내가 본 열 번째 다른 사람과 같다. 이 동일한 문제에 게시하십시오. – Christo

관련 문제