2015-09-28 4 views
0

J'ai un petit problème avec la sélection de max ID dans ma base de données. Ceci est mon code:ExecuteScalar renvoyant une valeur erronée

string checkcat = "SELECT MAX(PRODUCT_ID) FROM CMS_PRODUKTY WHERE (CATEGORY_ID = CATEGORY_ID) AND (CLIENT_ID = @CLIENT_ID)"; 
SqlCommand cmd2 = new SqlCommand(checkcat, con); 
cmd2.Parameters.Add("@CATEGORY_ID", System.Data.SqlDbType.Int).Value = kategoria; 
cmd2.Parameters.Add("@CLIENT_ID", System.Data.SqlDbType.Int).Value = HiddenField1.Value; 
con.Open(); 
int noweid = Convert.ToInt32(cmd2.ExecuteScalar()); 
con.Close(); 

Le point est le nouveau int « noweid » devrait être 1 ou plus - dépendent de l'intérieur product_id table, mais il est de retour 0. Je n'ai aucune idée pourquoi ... La les autres variables - kategoria et HiddenField1.Value sont correctes.

Des idées de quoi ai-je eu tort?

+0

Avez-vous essayé d'exécuter cette requête sur la base de données à l'aide de SQL Server Management Studio et de vérifier qu'elle renvoie 1 ou une valeur supérieure? –

+1

Cela ne résoudra pas votre problème mais vous avez une faute de frappe '(CATEGORY_ID = CATEGORY_ID)' devrait être '(CATEGORY_ID = @CATEGORY_ID)' - notez le '@'. – petelids

Répondre

2

Vous avez

WHERE (CATEGORY_ID = CATEGORY_ID) 

mais vous voulez

WHERE (CATEGORY_ID = @CATEGORY_ID) 

Vous devez également analyser la chaîne à int:

cmd2.Parameters.Add("@CLIENT_ID", System.Data.SqlDbType.Int).Value = int.Parse(HiddenField1.Value); 

peut-être kategoria est aussi un string, puis l'analyser aussi à int.

+0

Merci. Cela fonctionne parfaitement. Avoir lu ce code mille fois et n'a pas vu une telle erreur ... Juste besoin d'ajouter @ à condition sql. – Ashiv3r