2010-07-23 5 views
0

J'ai une instruction SQL suivante et voudrais mettre à jour la table de la base de données si la ligne a été trouvée.SELECT et mettre à jour la ligne dans DataTable

string sql = "Select A.CNum FROM TABLEA A, TABLEB B WHERE A.CID= B.CID AND A.CNum is NULL AND [email protected]" 

DataTable dt = querySql(sql, params); 

       if (dt.Rows.Count > 0) 
       { 
        // I would like to update CNum from TableA 
       } 

Quelle est la meilleure méthode pour mettre à jour la ligne à partir de l'instruction SQL?

Merci ..

Répondre

0

vous pouvez utiliser EXISTS construction pour le faire en une seule requête.

string sql = "IF EXISTS(Select A.CNum FROM TABLEA A, TABLEB B WHERE A.CID= B.CID AND A.CNum is NULL AND [email protected]) BEGIN ..... END" 
+0

Merci. Je n'utilise pas de procédure stockée. Y at-il de toute façon que je peux trouver si la ligne a été mise à jour? – nav100

2

Il devrait être possible de le faire dans une déclaration sans réimportations des données de la base de données et à l'arrière:

 
UPDATE 
    TABLEA 
SET 
    CNum = newValueHere 
FROM 
    TABLEA A, 
    INNER JOIN TABLEB B ON B.CID = A.CID 
WHERE 
    A.CNum is NULL 
AND [email protected] 

note que je qualifié la référence CID dans la dernière ligne (I pense que vous obtiendrez une erreur sans cela comme il existe sur les deux tables, et utilisé une jointure interne pour connecter vos tables Notez que newValueHere peut être une expression de l'une des colonnes dans A ou B.

+0

Merci Tom. Je voudrais retourner TRUE de cette méthode s'il y a une ligne dans la table. Comment saurais-je s'il y a un enregistrement dans le tableau? – nav100

1

Utiliser le SQL de la réponse de Tom avec t Le suivant C# vous donnera ce que vous voulez.

using(SqlCommand cmd = new SqlCommand(sql, conection)) 
{ 
    int rowsAffected = cmd.ExecuteNonQuery(); 
} 
Questions connexes