2011-04-24 2 views
0

Je rencontre des problèmes avec une instruction MySQL Select Where qui utilise des alias et des paramètres. Mon problème réside dans la partie Où de la déclaration. En l'état, je ne retourne aucun résultat lorsque j'essaie d'utiliser des paramètres.Requête MySql - Sélectionnez Où, Alias ​​et paramètre

La déclaration en question est:

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) 

L'exécution de cette requête avec les paramètres corrects renvoie les colonnes de droite, mais aucune donnée.

Suppression de la clause where entièrement J'obtiens la table complète comme prévu.

La modification de la clause where de WHERE (postcode = @postcode) AND (suburb = @suburb) AND (categorycode = @categorycode) AND (status = @status) à WHERE (postcode = 4020) ne fonctionne pas - comme prévu.

Remplacer la clause WHERE par (code postal = @postcode) et passer le paramètre (comme ci-dessous) ne fonctionne pas.

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

La requête complète (avec les paramètres) fonctionne avec succès lorsqu'il est exécuté à partir de l'explorateur de commande du serveur SQL.

 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

Je pense que vous devriez également ajouter un tag pour la langue à partir de laquelle vous accédez à MySQL. – stalker

Répondre

0

Ok, c'est un long shot parce que je ne suis pas sûr de ce que la langue que vous utilisez (il est C#?) Mais il me semble étrange que vous utilisez @ lors du réglage des paramètres.

Généralement, vous utilisez un caractère magique pour désigner un paramètre dans une requête SQL, mais lorsque vous le définissez par programmation, vous omettez ce caractère.

Avez-vous essayé

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

au lieu de

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

?

+0

J'utilise C#, en développant une application ASP avec MySql comme base de données. Le @ désigne un paramètre pour les requêtes Mysql, et la méthode AddWithValue est surchargée en tant que (chaîne NomParamètre, valeur d'objet), et autant que je sache, le nom du paramètre doit avoir le @ (il fonctionne dans mes autres requêtes - et je crois que mysql supporte les requêtes nommées?). – Travis

0

C'est C#. Plongez les préfixes '@' dans les paramètres du code C#.

+0

Ah. Cela fonctionne vraiment, merci à vous deux! Où ai-je choisi cette convention de nommage @ de ...? – Travis

+0

A partir de conventions de script MySQL, de multiples conventions de procédures stockées SQL, tout. * Ne vous sentez pas mal! * C'est une douleur le @ char casse les choses, il m'a fallu 2 jours pour le comprendre il y a des années quand j'ai fait la * même chose * et vous êtes comme la 10ème personne que j'ai vue poster sur ce même problème. – Christo