2011-07-07 3 views
1
public void InsertUserReputation() 
{ 
    StringBuilder sb = new StringBuilder(); 
    sb.Append("UPDATE u "); 
    sb.Append(" SET u.Reputation = (u.Reputation + @Reputation)");//Problem is here u.Reputation is "Null" not 0... I think i need some if statement to check if it is a null and then update it to 0 and then add..what do you think? 
    sb.Append(" FROM Users u"); 
    sb.Append(" INNER JOIN Comments c ON c.UsersID = u.UsersID"); 
    sb.Append(" WHERE c.CommentsID = @CommentsID"); 

    using (SqlConnection conn = new SqlConnection(AllQuestionsPresented.connectionString)) 
    { 
     SqlCommand cmd = new SqlCommand(sb.ToString(), conn); 
     cmd.Parameters.Add("@Reputation", SqlDbType.Int).Value = 5; 
     cmd.Parameters.Add("@CommentsID", SqlDbType.Int).Value = commentID; 
     conn.Open(); 
     cmd.ExecuteNonQuery(); 
    } 
} 

Je veux ajouter une réputation à l'utilisateur de 5 points pour le commentaire, il laisse dans le thread..but il ne parvient pas à mettre à jour pourquoi?/... CommentID n'obtenir un valeur et ainsi la réputation paramaterdéclaration de mise à jour SQL pour ajouter une valeur

+0

(vous n'avez pas besoin d'un StringBuilder pour cette instruction, btw - qui ajoute une petite touche de surcharge, mais plus important encore: cela rend le code inutilement complexe) –

+3

est-ce que 'u.Reputation' est nul par hasard? –

+0

Quelle est l'erreur que vous obtenez? Ou ça fonctionne, mais pas d'erreur? Plus de détails, s'il vous plaît. – Cortright

Répondre

1
sb.Append(" SET Reputation = (u.Reputation + @Reputation)"); 

edit: je manqué votre note originale au sujet u.Reputation étant éventuellement nul. Essayez suivante:

sb.Append(" SET Reputation = (isnull(u.Reputation,0) + @Reputation)"); 
+0

dammit travail Stil ne marche pas .. je ne sais pas whyh – WithFlyingColors

+0

modifié ma réponse. En fait, la réponse de ypercube devrait donner le même résultat. – Arvo

3

changement

SET u.Reputation = (u.Reputation + @Reputation) 

dans:

SET u.Reputation = COALESCE(u.Reputation,0) + @Reputation 

si NULL s dans le champ Reputation sont changés en 0 avant d'ajouter @Reputation.


Vous pouvez garder votre code si vous définissez d'abord toutes les valeurs à NULL0 puis rendre le champ NOT NULL using ALTER TABLE. Exécutez les opérations suivantes, une fois:

UPDATE Users 
SET Reputation = 0 
WHERE Reputation IS NULL ; 

ALTER TABLE Users 
ALTER COLUMN Reputation NOT NULL DEFAULT 0 ; 
0

Vous pouvez également changer

SET u.Reputation = (u.Reputation + @Reputation) 

à

SET u.Reputation = COALESCE(u.Reputation + @Reputation, @Reputation, 0) 

mais toutes les réponses existantes bien répondent à vos besoins

Le seul avantage de la Au-dessus des offres est que, dans l'événement @Reputation est également NULL, cela fonctionne toujours.

Questions connexes