J'essaie de traiter une instruction UPDATE via mon code C#. J'utilise ce qui suit ...SqlCommand.ExecuteNonQuery() retourne toujours 0
using (SqlCommand cmd = new SqlCommand(query, sqlConn))
{
cmd.Parameters.AddWithValue("@CUSTOMER", intCustomer);
cmd.Parameters.AddWithValue("@CONDITION", strCondition);
cmd.Parameters.AddWithValue("@BOOK", strBook);
cmd.Parameters.AddWithValue("@PAGE", strPage);
cmd.Parameters.AddWithValue("@ENDPAGE", strEndPage);
System.Diagnostics.Debug.WriteLine("Expanded query: " +
query.ExpandSqlQuery(cmd.Parameters));
int affectedRows = cmd.ExecuteNonQuery();
System.Diagnostics.Debug.WriteLine("Number of rows affected: " + affectedRows);
}
J'ai essayé de le faire avec et sans params juste pour le débogage et toujours obtenir une valeur de retour de 0
pour une raison quelconque.
J'ai fait une petite méthode d'extension qui élargit les params pour me montrer la requête réelle (sans variables) ...
public static string ExpandSqlQuery(this String input, SqlParameterCollection sqlParams)
{
string results = input;
foreach (SqlParameter p in sqlParams)
results = results.Replace(p.ParameterName, p.Value.ToString());
return results;
}
... que j'appelle juste avant d'exécuter la requête pour voir ce qui être couru.
System.Diagnostics.Debug.WriteLine("Expanded query: " +
query.ExpandSqlQuery(cmd.Parameters));
Je prends alors la même requête qui a donné 0 lignes affectées dans C# et exécuter manuellement dans Microsoft SQL Server Management Studio
de l'avoir me dire 1
ligne a été affectée!
La requête avec params est ...
UPDATE
BookList
SET
Overdue=2
WHERE
[email protected]
and Condition='@CONDITION'
and Book='@BOOK'
and Page='@PAGE'
and EndPage='@ENDPAGE'
and Overdue=1;
UPDATE
BookInfo
SET
Finished=0
WHERE
[email protected]
and Condition='@CONDITION'
and Book='@BOOK';
La requête est étendue ...
UPDATE
BookList
SET
Overdue=2
WHERE
Customer=85
and Condition='old'
and Book='00103'
and Page='00304'
and EndPage='00304'
and Overdue=1;
UPDATE
BookInfo
SET
Finished=0
WHERE
Customer=85
and Condition='old'
and Book='00103';
Toute idée comment je peux aller sur le débogage ce problème?
peut vous envoyer votre requête de mise à jour – Niladri
Vérifiez vos chaînes de connexion, assurez-vous que vous êtes connecté à la même base de données SQL? Je suggère seulement ceci parce que je l'ai fait avant ... –
Êtes-vous capable d'exécuter SQL Server Profiler sur le serveur pour vérifier que la requête que vous voyez à partir de votre code C# est la même chose qui est en cours d'exécution sur le serveur ? –